主机字节序的大端和小端
1.定义:
大端模式(Big Endian):数据的高字节,保存在内存的低地址中;数据的低字节,保存在内存的高地址中。
小端模式(Little Endian):数据的高字节,保存在内存的高地址中;数据的低字节,保存在内存的低地址中。
2. 判断操作系统是大端还是小端:
bool IsBigEndian() { union NUM { int a; char b; }num; num.a = 0x1234; if(num.b == 0x12) //低位地址存高位数值,说明是大端 return true; else return false; }
3. 大端和小端的转换函数:
(1)32位系统下:
uint32_t reversebytes_32(uint32_t value) { return (value&0x000000FF)<<24 | (value&0x0000FF00)<<8 | (value&0x00FF0000)>>8 | (value&0xFF000000)>>24; }
(2)64位系统下:
uint64_t reversebytes_64(uint64_t value) { uint32_t low_uint64 = uint64_t(reversebytes_32(uint32_t(value))); //低32位转换 uint64_t high_uint64 = (uint64_t)reversebytes_32(uint32_t(value>>32)); //高32位转换 return (low_uint64<<32) + high_uint64; }