gpt4 book ai didi

c - 用 C 将结构写入文件的可移植方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 16:38:09 26 4
gpt4 key购买 nike

我需要以一种可移植的方式将一个 C struct 序列化为一个文件,这样我就可以在其他机器上读取该文件,并且可以保证我将得到与我放入的相同的东西.

文件格式无关紧要,只要它相当紧凑(如果不是为了可移植性问题,写出结构的内存中表示将是理想的。)

是否有一种简洁的方法可以轻松实现这一点?

最佳答案

您本质上是在设计一个二进制网络协议(protocol),因此您可能希望使用现有的库(例如 Google 的 Protocol Buffer )。如果您仍想自己设计,您可以通过这样做实现编写原始结构的合理可移植性:

  1. 打包您的结构(GCC 的 __attribute__((packed)),MSVC 的 #pragma pack)。这是特定于编译器的。
  2. 确保您的整数字节顺序正确(htonshtonl)。这是特定于体系结构的。
  3. 不要对字符串使用指针(使用字符缓冲区)。
  4. 使用 C99 精确整数大小(uint32_t 等)。
  5. 确保代码仅在 CHAR_BIT 为 8 的情况下编译,这是最常见的,或者以其他方式处理字符串到 8 位八位字节流的转换。在某些环境中 CHAR_BIT != 8,但它们往往是专用硬件。

有了这个,只要您使用相同的结构定义,您就可以合理地确定在另一端会得到相同的结果。然而,我不确定 float 表示,但我通常会避免发送它们。

您可能想要解决的与可移植性无关的另一件事是通过引入长度作为第一个字段和/或使用版本标记来向后兼容。

关于c - 用 C 将结构写入文件的可移植方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4274055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com