210324 Little-Endian

1
2
3
4
5
6
uint32_t a = 0;
uint16_t x = 10;
uint16_t y = 20;
a = (x << 16) | y;
uint16_t* res = (uint16_t*) &a;
printf("%u %u\n", *res, *(res + 1)); //output: 20 10

Windows和Linux都是小端
x=0x000a
y=0x0014
a=0x000a0014
在内存中:

1
2
3
4
5
6
低地址------->高地址
x 0a 00
y 14 00
a 14 00 0a 00
^res ^res+1
20 10