整个晚上我一直在寻找这个问题的答案并且没有 sleep ,但是我无法让它发挥作用...... 我有一个二进制文件,我想读取它并获取每个整数的值...... 这是一些代码:
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;
}
}
}
我对那个p做了一些printf
(使用%d和%i),我得到了类似-1161602550、1213357911、994462027这样的值...
我真的不知道发生了什么事,我也尝试将 p 更改为 char[5] 但到目前为止还没有工作......
预先感谢您...
最佳答案
“二进制”打开模式不会改变 fscanf
解析文件的方式。它的唯一作用是(可能)防止在 stdio 设施读取文件时将 \r\n
行结尾转换为 \n
。
要将 stdio 文件 f
读取为整数 i
,您可以执行 fread( & i, sizeof i, 1, f )
。但请注意,这不尊重字节序。如果没有显式的字节交换,您的二进制格式将依赖于平台的字节顺序。
关于c - 从C语言文件中读取二进制整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872054/