整夜我一直在寻找答案并且还没有入睡,但是,我无法使其工作……我有一个二进制文件,我想读取它并获取每个整数的值……这里是一些代码:
FILE *f;
char ch;
char t1[3];
int l, c, grayScale, i, j;
int p =0;
f = fopen(pgm, "rb");
(...)
c = 0;
l = 0;
fscanf(f, "%d", &c);
fscanf(f, "%d", &l);
fscanf(f, "%d", &grayScale);
A = alocar_memoria_matriz(l,c);
for(i = 0; i<l; i++){
for(j=0; j<c; j++){
if(fread(&p,sizeof(int),1,f) !=1){
fprintf(stderr, "\nError!\n");
fclose(f);
free_memoria_matriz(A,l);
return NULL;
}else if(p>grayScale|| p<0){
fprintf(stderr, "\nError!\n");
fclose(f);
free_memoria_matriz(A,l);
return NULL;
}else{
A[i][j] = (tdf_elemento) p;
}
}
}
我做了一些printf
p(用%d和%i),得到的值是-1161602550、1213357911、994462027 ...我真的不知道发生了什么,我也试图将p更改为char [5],但是到目前为止还没有工作...预先谢谢...
“二进制”打开模式不会更改fscanf
文件解析的方式。它的唯一作用是(也许)防止stdio工具读取文件时将\r\n
行尾转换为\n
。
要将stdio文件读取f
为整数i
,可以执行以下操作fread( & i, sizeof i, 1, f )
。但是请注意,这不尊重字节顺序。没有显式的字节交换,您的二进制格式将取决于平台的字节序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句