什么是大端和小端
Big-Endian和Little-Endian的定义如下:
1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端
举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:
1)大端模式:
低地址 -----------------> 高地址
0x12 | 0x34 | 0x56 | 0x78
2)小端模式:
低地址 ------------------> 高地址
0x78 | 0x56 | 0x34 | 0x12
大端转小端16位
- #define BigtoLittle16(A) (( ((uint16)(A) & 0xff00) >> 8) |
- (( (uint16)(A) & 0x00ff) << 8))
大端转小端32位
- #define BigtoLittle32(A) ((( (uint32)(A) & 0xff000000) >> 24) |
- (( (uint32)(A) & 0x00ff0000) >> 8) |
- (( (uint32)(A) & 0x0000ff00) << 8) |
- (( (uint32)(A) & 0x000000ff) << 24))
小端转大端 16位
// 16位 将2个字节,转换成大端
static short Little2Big(byte A, byte B) {
return (short) (((short) (B) & 0x00ff) << 8 | ((short) (A) & 0x00ff));
}