仅在C

时间:2016-09-10 19:12:55

标签: c struct fread fseek

在C中我试图选择结构的特定成员并将其打印出来。我想知道,这种操作的建议格式是什么?我几乎尝试了所有我能想到的东西。我似乎无法将其限制在结构的特定chunk成员。

fseek(in, sizeof(d.contents.datas.chunk), SEEK_SET);
fread(&ch, 1, 1, in);
fprintf(out, "%02x", (int)(ch & 0x00FF));

似乎我可以获得所有结构数据,或只获得一个字符。出于某种原因,数据也没有正确显示,例如bytes应该是实际的bytes,但它会以1形式出现。很明显,这个结构的数据打印方式确实存在问题。可能是大端与小端吗?我知道我访问的文件是big endian。

结构Im访问如下:

struct chunkInfo
{
    int chunkInformation; 
    int bytes;

    union
    {
        struct
        {
            long size;     
            char chunk[1];     
        } datas;                 
    } contents;                  
};

1 个答案:

答案 0 :(得分:2)

您正在寻找文件中的错误位置。假设您的机器的endian与文件的endian相同,那么这将起作用:

fseek(in, long(&d.content.data.chunk[0] - &d), SEEK_SET);
fread(&ch, 1, 1, in);
fprintf(out, "%02x", (int)(ch & 0x00FF));

第一行计算结构中块的偏移量(以字节为单位)。你使用的是sizeof(chunk),当然只返回1。

如果endian不同,那么在阅读结构后,你必须将每个非char字符转换为正确的endian。