C int内存存储.最低有效位与最高有效位



当我在内存中连续组合两个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 = %dn", *mem16);
return 0;
}

有人能解释一下我目前对C记忆的理解中遗漏了什么吗?谢谢!:-(

它被称为endianess

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

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

相关内容

  • 没有找到相关文章

最新更新