在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;
};
答案 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。