类型位长度和体系结构特定实现

时间:2014-05-26 10:26:49

标签: c++ memory binary

我正在用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?

第一个问题实际上与第二个问题有关,因为在这里我将不得不进行位移以交换字节顺序。

我知道我可以逐字节读取文件并添加每两个字节。但有没有一种方法可以缓解这种痛苦?

我很抱歉如果我暧昧。这个问题很难解释。希望你能看到我在说什么。我只是想在内部存储这些数据。

所以我很感激一些建议,或者你可以分享一些你在这个主题上的经验。

2 个答案:

答案 0 :(得分:2)

如果在存储数据的文件上使用big endian,则可以依赖htons(),htonl(),ntohs(),ntohl()在保存之前或读取之后将整数转换为正确的endianess。

答案 1 :(得分:1)

没有简单的方法可以做到这一点。

您可能希望查看序列化库(例如Protobufboost serialization),而不是自己这样做,他们会为您处理大量的事情。

如果您想自己动手,请根据需要使用uint32_t)中的固定宽度类型(<cstdint>等)和endian conversion functions。要么有&#34;前缀&#34;在您的文件中确定它包含的字节顺序(BOM /字节顺序标记),或始终存储在大端或小端,并系统地转换。

如果你需要序列化字符串,要特别小心,它们也有自己的编码问题。