位移是否正确地隔离了不同端系统上的字节?

时间:2015-10-21 18:16:46

标签: c endianness

我试图将整数写入字节缓冲区。以下代码是否总是以大端格式写入,无论系统的字节顺序如何:

byte[0] = (uint8_t) (val & 0xFF000000) >> 24;
byte[1] = (uint8_t) (val & 0x00FF0000) >> 16;
byte[2] = (uint8_t) (val & 0x0000FF00) >> 8;
byte[3] = (uint8_t) (val & 0x000000FF);

不幸的是,我无法访问htonl()和类似的功能。

1 个答案:

答案 0 :(得分:7)

是的,这将正常工作。位移运算符处理抽象数值,而不是它们在硬件寄存器或RAM中的表示方式。 >> N基本相当于除以2 N