2

当我在内存中连续组合它们时,我希望以下两个uint8_t(0x00 和 0x01)uint16_t合二为一,给我一个 0x0001 的值。相反,我得到了 0x0100 = 256,这让我很惊讶。

#include <stdio.h>
#include <stdint.h>

int main(void){

    uint8_t u1 = 0x00, u2 = 0x01;
    uint8_t ut[2] = {u1, u2};
    uint16_t *mem16 = (uint16_t*) ut;

    printf("mem16 = %d\n", *mem16);

    return 0;
}

谁能解释一下我目前对 C 内存的理解中遗漏了什么?谢谢!:-)

4

2 回答 2

2

它被称为endianess

现在大多数系统都使用小端。在这个系统中,首先存储最低有效字节。因此,0x0100 的存储(假设为 2 个字节表示)与{0x00, 0x01}您的情况完全相同

于 2020-04-21T10:40:13.620 回答
-2

ut[0] 插入到 mem16 的 LSB 上, ut[1] 插入到 MSB 上。

于 2020-04-21T10:42:17.507 回答