从C中的文件中读取二进制整数

时间:2013-11-09 03:31:12

标签: c binary fread

整晚我一直都在为此寻找答案。没有睡觉,但我不能让它工作...... 我有一个二进制文件,我想读取它并获取每个整数的值... 这是一些代码:

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],但到目前为止还没有工作...... 提前谢谢你......

1 个答案:

答案 0 :(得分:2)

“二进制”打开模式不会改变fscanf解析文件的方式。它的唯一作用是(可能)阻止将\r\n行结尾转换为\n,因为stdio工具会读取该文件。

要从stdio文件f读取整数i,您可以执行fread( & i, sizeof i, 1, f )。但请注意,这不尊重字节序。如果没有明确的字节交换,您的二进制格式将依赖于平台依赖于平台。

相关问题