0

在我的 little-endian z80-esque 处理器上,我有一个 32 位long int msk = 0xFFFFFF00(子网掩码)。(unsigned char *)&msk今天早上,当我尝试传递给一个 void bar(unsigned char * c);遍历 this 值&msk并将它们存储到数据库的函数时,我了解了字节序 。

不幸的是,由于 z80 处理器的 little-endian-ness,数据库“向后”存储值,当另一个函数读回字节时,它会看到0x00FFFFFF,这不是正确的子网掩码。

工会有什么简单的方法吗?我想char[3]映射到我的 LSB long int msk,而不是现在的(char[0]获取 LSB)。

总之,Big-Endian 更好。

4

2 回答 2

2

解决字节序问题:每当您将整数序列化到磁盘或网络时,将它们转换为已知的字节顺序。网络顺序又名大端,是最简单的,因为 htonl 和 htons 函数已经存在。或者您可以通过反复拉低低位字节byte & 0xFF; byte >>= 8或高位字节来手动完成((byte >> i*8) & 0xFF)

如果您有一个long int值并且想要它的 LSB,那么使用位移和掩码操作而不是联合或强制转换更便于移植。

于 2012-10-26T18:30:44.377 回答
1

ntohl将交换 32 位整数的字节序

于 2012-10-26T18:36:38.957 回答