整晚我一直都在为此寻找答案。没有睡觉,但我不能让它工作...... 我有一个二进制文件,我想读取它并获取每个整数的值... 这是一些代码:
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],但到目前为止还没有工作......
提前谢谢你......
答案 0 :(得分:2)
“二进制”打开模式不会改变fscanf
解析文件的方式。它的唯一作用是(可能)阻止将\r\n
行结尾转换为\n
,因为stdio工具会读取该文件。
要从stdio文件f
读取整数i
,您可以执行fread( & i, sizeof i, 1, f )
。但请注意,这不尊重字节序。如果没有明确的字节交换,您的二进制格式将依赖于平台依赖于平台。