一、概念
高位低位:以0x12 34 56 78为例,12为高位,78为低位。
高位低位理解:假设银行卡余额为12345678,12和78对比,12为高位,78为低位。
高地址低地址: 0x00000001
0x00000002
0x00000003
0x00000004
上面地址中0x00000001为低地址,0x00000004为高地址
高地址低地址理解:假设一本书有4页,第1页和第4页对比,第1页为低地址,第4页为高地址
大端:高位数据存在低地址,符合人类阅读习惯
小端:高位地址存在高地址,与人类阅读习惯相反
二、大小端转换代码
#define SWAP_UINT16(x) ((((uint16_t)x) >> 8) | \
((((uint16_t)x) << 8)))
#define SWAP_UINT32(x) ((((uint32_t)x) >> 24) | \
((((uint32_t)x) & 0x00FF0000) >> 8) | \
((((uint32_t)x) & 0x0000FF00) << 8) | \
(((uint32_t)x) << 24))
#define SWAP_UINT64(x) ((((uint64_t)x) >> 56) | \
((((uint64_t)x) & 0x00FF000000000000) >> 40) | \
((((uint64_t)x) & 0x0000FF0000000000) >> 24) | \
((((uint64_t)x) & 0x000000FF00000000) >> 8) | \
((((uint64_t)x) & 0x00000000FF000000) << 8) | \
((((uint64_t)x) & 0x0000000000FF0000) << 24) | \
((((uint64_t)x) & 0x000000000000FF00) << 40) | \
(((uint64_t)x) << 56))
三、实际测试