将二进制文件读入struct,使用C处理char [8]

时间:2016-09-07 15:52:14

标签: c struct binary

我有以下代码,它完美地打印出二进制文件(打印前4个字符(我猜测每个字符2位,总共8个字符?

void myChunks(){

    struct chunkStorage
    {
        long sxID;
        char chunk[8];      // ‘Chunk of Data’

    };

        FILE *p;
        struct chunkStorage d;
        p=fopen("myfile.txt","rb");
        while(1){
            fread(&d.chunk,sizeof(d.chunk),1,p);
            if(feof(p)!=0)
                break;
            printf(“%s”, d.chunk);
            }
    fclose(p);
}
myChunks();

因此,我能够获取数据的唯一方法似乎是以这种方式使用while循环。我想知道如何连接它,还有十六进制编码吗?

char chunk [8]有什么作用?为什么我必须遍历每8个字节?为什么我不能忘记"而#34;循环并只读取fopen语句后的完整块,然后将完整数据转换为十六进制?

连接,获取完整文件,或者这可能是错误的是正确的吗?

1 个答案:

答案 0 :(得分:1)

我不确定此文件的历史记录,或者定义的结构的其他部分,但从严格的C角度来看,该文件只是大量的8字节值,带有空值在他们中(或者printf完全无效。)

是的,如果您的代码有效,则可以使用以下内容:

typedef struct justchunk { char chunk[8] ; } chunker ;
chunker * ptr ;

ptr= (chunker * ) malloc( 1000000 * sizeof( chunker ) ) ;
int iret ;
f= fopen( "myfile.txt", "rb") ;
iret= fread( ptr, sizeof( chunker), 1000000, f) ;

iret中返回的值将是读取完整记录的数量。

错误处理,文件关闭作为练习留给读者。