将长整型和 time_t 字节的大小定义为 4 字节



我想将两个树莓派与 C 程序同步。如果程序仅在 Pi 上运行,它工作正常,但对于开发,我想使用我的 PC(它也更容易调试(,但我通过网络直接将 timespec 结构作为二进制发送。一个覆盆子使用4字节长而time_t,我的电脑每个使用8字节......所以他们没有走到一起。

是否可以仅针对此 C 脚本将 long 和 time_t 分别设置为 4 字节?

我知道长、短等的大小是由系统定义的。

重要提示:我只想在脚本中定义一次,而不是每次都将其转换为 uintXX 或 int。

在编程中,需要将网络传输与内存处理分开处理的情况并不少见。事实上,这几乎是常态。因此,确实建议将其转换为正确字节顺序和大小的网络格式,同时帮助解决接口的抽象问题。

您不妨考虑转换为纯文本,如果这不是时间紧迫的数据交换。它使调试变得更加容易。

C 可能不是这里工作的最佳工具。它太低级了,无法提供像JavaScript,Python或类似的更抽象的语言这样的自动数据序列化。

您不能假设timespec的定义在不同的平台上是相同的。首先,int 的大小会根据 32/64 位架构而有所不同,并且您也可能遇到字节序问题。

当您想要在异构平台之间交换数据结构时,您需要使用明确的数据和明确的端点约定来定义自己的协议。

一种解决方案是以 ASCII 格式发送数字。效率不是很高,但如果只是几个价值观,谁在乎呢?

另一种方法是创建一个带有 (u(intXX_t 字段的交换结构。 你可以假设一个标准的覆盆子内核会像你的PC一样是小端序,但如果你正在编写一个小的交换协议,你不妨添加几个htonl/ntohl以获得良好的衡量标准。

最新更新