我正在用C ++做东西,但最近我发现在类型可以容纳多少数据方面存在细微差别,而且字节顺序也是一个问题。
假设我有一个二进制文件,其中我编写了大小为2个字节的短路。该文件采用二进制格式,如:
FA C8 - 数据段1
BA 32 - 数据段2
53 56 - 数据段3
现在一切都很顺利。现在我想读取这些数据。有两个问题:
1 what data type to choose to store this values?
2 how to deal with endianness of the target architecture?
第一个问题实际上与第二个问题有关,因为在这里我将不得不进行位移以交换字节顺序。
我知道我可以逐字节读取文件并添加每两个字节。但有没有一种方法可以缓解这种痛苦?
我很抱歉如果我暧昧。这个问题很难解释。希望你能看到我在说什么。我只是想在内部存储这些数据。
所以我很感激一些建议,或者你可以分享一些你在这个主题上的经验。
答案 0 :(得分:2)
如果在存储数据的文件上使用big endian,则可以依赖htons(),htonl(),ntohs(),ntohl()在保存之前或读取之后将整数转换为正确的endianess。
答案 1 :(得分:1)
没有简单的方法可以做到这一点。
您可能希望查看序列化库(例如Protobuf或boost serialization),而不是自己这样做,他们会为您处理大量的事情。
如果您想自己动手,请根据需要使用uint32_t
)中的固定宽度类型(<cstdint>
等)和endian conversion functions。要么有&#34;前缀&#34;在您的文件中确定它包含的字节顺序(BOM /字节顺序标记),或始终存储在大端或小端,并系统地转换。
如果你需要序列化字符串,要特别小心,它们也有自己的编码问题。