二进制文件写/读不同的端

时间:2017-01-04 00:55:44

标签: c++ c

关于将大小写结构(包含uint8_t,uint32_t等)写入二进制文件的安全方法的一个相当简单的问题,以确保它的可读性

  1. 是否接受使用#pragma pack? (类似于BITMAPFILEHEADER)然后将整个struct写入文件(到目前为止,它使用了位图)。 我应该使用简单的序列化来单个字节(如Serialization of struct所示)?

  2. 字节序怎么样?如何准备切换到不同的?是强制仅使用小端,并要求应用(在BE中)将每个元素的字节转换接受?

  3. 我目前的项目相当简单,但我希望将来扩展它,所以我宁愿尽量避免任何陷阱。 我知道boost提供了序列化,但是我知道我想手动处理这些东西。

1 个答案:

答案 0 :(得分:2)

  

是否接受使用#pragma pack?

这令人不悦。打包结构将违反数据对齐要求。在某些体系结构中,未对齐访问只是速度较慢,而在其他体系结构上它是完全禁止的。在后一种情况下,编译器被迫生成代码,每次访问时都会从字节重组数据成员。

您应该编写自定义序列化代码,而不是结构打包。也就是说,像通常那样设计你的类,使用封装和东西,然后只提供序列化/反序列化方法。

  

字节序怎么样?如何准备切换到不同的?是强制仅使用小端,并且需要应用(在BE中)将每个元素的字节转换接受?

这是完全被接受并且实际上被广泛使用的东西。将endiannes以数据格式编码的替代方案本身是一个坏主意恕我直言,因为它没有充分的理由使你的代码复杂化。在进行I / O时,字节交换不会成为性能瓶颈。