C 将 2 个连续的 uint8_t 转换为 1 个 uint16_t

问题描述 投票:0回答:1
int main() {
    uint8_t bytes[] = {0, 126};
    uint8_t *pointer = bytes;
    printf("Hex: %x", (*(uint16_t*)pointer));
}

输出

Hex: 7e00                                                                                                                 

为什么输出是7e00?

bytes
数组在内存中不应该是这样的吗
0x00
0x7e

当告诉 C 将
pointer
转换为
uint16_t*
并打印它所指向的内容时,我希望它打印
007e

但事实并非如此!

arrays c pointers
1个回答
0
投票

内存中的字节数组不应该像这样 0x00 0x7e 吗?

内存中字节顺序被解释为

uint16_t
的方式取决于系统的
Endianness

此外,

*(uint16_t*)pointer)
还会调用未定义行为,因为指针不包含有效
uint16_t
的地址。这意味着该标准不保证程序的输出。

我的目标是将具有两个 uint8_t 的数组转换为一个 unint16_t

正如上面评论的,您可以使用以下内容:

uint16_t value = bytes[0] << 8 | bytes[1];
    
© www.soinside.com 2019 - 2024. All rights reserved.