c - 从C语言文件中读取二进制整数

标签 c binary fread

整个晚上我一直在寻找这个问题的答案并且没有 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/

相关文章:

security - 自验证二进制文件?

java - 我该如何着手弄清楚这个复杂的递归算法?

c++ - 如何将 std::map 输出到二进制文件?

c++ - 使用 fwrite 转储的文件是否可以跨不同系统移植?

javascript - 为什么 || JavaScript 中的 (or) 和 && (and) 运算符的行为与 C 中的不同(返回非 bool 值)?

c - 不同程序中的linux动态共享内存

并发访问且不受数据结构的影响

c - C中的假匿名函数

c - 除非元素大小设置为+1,否则复制整数.csv的C程序将少复制一个元素

c - 使用 fread 函数 : size to be read is greater than available for reading