【发布时间】:2016-09-10 19:12:54
【问题描述】:
在 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 的形式出现。显然,打印此结构中的数据的方式确实存在问题。可能与大端与小端有关吗?我知道我正在访问的文件是大端。
我访问的结构如下:
struct chunkInfo
{
int chunkInformation;
int bytes;
union
{
struct
{
long size;
char chunk[1];
} datas;
} contents;
};
【问题讨论】:
-
#pragma pack(忽略字节序)
-
是的,如果你在intel架构上接收大端数据,你需要转换它。检查例如
hton和ntoh. -
一般来说,使用 json 或 xml 之类的 ascii 格式进行网络数据传输可能是最安全的。如果发送机器使用 64 位整数,而你的机器使用 32 怎么办?等等。
-
我很想知道我所做的是否是大/小端的问题。我个人不这么认为,因为“块”成员肯定是二进制的,我不需要担心它的格式(它的格式将由读取此文件的软件处理)。我只需要找到一种方法来选择结构的成员,这听起来很容易,但显然在 C 中非常困难。我想我需要寻找包含“块”的开始字节的文件(使用 fseek)然后阅读该部分。但它仍然让我望而却步。我相信这比我想象的要容易得多。
-
嗨,Dieter,#pragma pack,真的需要读取一个简单的结构并仅选择该成员进行读取吗?