当我在内存中连续组合两个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上。