gpt4 book ai didi

c - Big Endian 与 Little Endian 填充问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:15 24 4
gpt4 key购买 nike

在我的代码中有一个结构存在填充问题。我修复了它们,我的代码在小端机器上运行良好。这种结构是否有可能导致大端机器出现问题??

最佳答案

您需要牢记以下几点:

  • 无论何时进行数据通信,通信协议(protocol) 的字节序都是最重要的。所有数据通信协议(protocol)都有(应该有)指定的字节顺序。大端可能是最常见的,因为在 CRC 计算是通过数字电子门而不是软件完成的时代,校验和本身必须是大端。

(这可能会导致相当模糊的协议(protocol),例如行业标准现场总线 CANopen,其中发送数据中的所有整数必须是小端,但标识符和校验和必须是大端。)

  • 在编写可移植代码时,结构填充总是会导致问题。像 send(&my_struct, sizeof(my_struct) 这样的代码是不可移植的!因为它会发送数据 任何填充字节。填充字节可以在结构内的任何地方,而不是就在最后。如果您需要编写真正可移植的代码,您不能将结构/union 用于数据协议(protocol),所有内容都需要存储在字节数组或类似的数组中,其中数据保证分配在相邻的单元格中。结构填充与字节顺序无关,而是与 CPU 指令集有关。

(摩托罗拉 CPU 传统上更好地支持读取和存储未对齐的地址,而英特尔的衍生产品有对齐要求,因此更倾向于使用填充。碰巧的是,摩托罗拉采用大字节序,而英特尔采用小字节序endians。所以巧合的是,little endian CPU 更可能有填充,但这只是因为 CPU 指令集,而不是因为 endianess 本身。)

关于c - Big Endian 与 Little Endian 填充问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062916/

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