【发布时间】:2019-04-20 22:23:53
【问题描述】:
通过 SO 搜索,我发现我可以执行以下操作以从 uint16_t 中提取字节,然后将它们重新组合为原始数字:
uint16_t x = 700;
// extract the bytes
uint8_t byte1 = (x >> 8) & 0xFF;
uint8_t byte2 = x & 0xFF;
// reassemble
uint16_t y = (byte1 << 8) + byte2;
但据我了解 - 这仅适用于小端系统,不适用于大端系统。
有没有办法独立于系统的字节序来实现相同的事情?
【问题讨论】:
-
不,这适用于任何系统。
-
字节顺序无关紧要。 16 位值的位 0..7 始终是最低有效位。决定字节顺序的是它存储在内存中的序列。
-
@KamilCuk "这将适用于任何系统" --> 也许。当
bytes1 >= 128和int是16 位时,byte1 << 8是UB。然而,我从未见过性能不如预期的 16 位系统。uint16_t y = (1u*byte1 << 8) + byte2;是一种便携式替代品。
标签: c bitwise-operators endianness