int main() {
uint8_t bytes[] = {0, 126};
uint8_t *pointer = bytes;
printf("Hex: %x", (*(uint16_t*)pointer));
}
输出
Hex: 7e00
为什么输出是7e00?
bytes
数组在内存中不应该是这样的吗0x00
0x7e
?pointer
转换为 uint16_t*
并打印它所指向的内容时,我希望它打印 007e
。内存中的字节数组不应该像这样 0x00 0x7e 吗?
内存中字节顺序被解释为
uint16_t
的方式取决于系统的 Endianness
。
此外,
*(uint16_t*)pointer)
还会调用未定义行为,因为指针不包含有效uint16_t
的地址。这意味着该标准不保证程序的输出。
我的目标是将具有两个 uint8_t 的数组转换为一个 unint16_t
正如上面评论的,您可以使用以下内容:
uint16_t value = bytes[0] << 8 | bytes[1];