1.为什么存在大小端模式
计算机系统中,每个地址单元对应一个字节(8bit),一种数据类型的数据可能占用若干字节。如何安排这种数据类型中的各个字节,哪个字节在低地址哪个在高地址,以及一个字节中的各个比特的排列,这就牵涉到大小端模式。也就是大家常说的字节序和比特序问题。字节序和比特序一般是一致的,要么都是大端,要么都是小端。
2.什么是大端和小端
大端模式:低位(字节/比特)放在高地址中,高位(字节/比特)放在低地址中。
小端模式:低位(字节/比特)放在低地址中,高位(字节/比特)放在高地址中。
高位和地位是对于我们正常阅读和书写来说,最开始是高位,例如int型数0x1234,0x12是字节的高位,0x34是字节的低位。
根据以上规则,我们给出在大、小端序系统中整数0x0a0b0c0d的表示方式。
对于大端系统:
byte addr 0 1 2 3
bit offset 01234567 01234567 01234567 01234567
binary 00001010 00001011 00001100 00001101
hex 0a 0b 0c 0d
对于小端系统:
byte addr 3 2 1 0
bit offset 76543210 76543210 76543210 76543210
binary 00001010 00001011 00001100 00001101
hex 0a 0b 0c 0d
3. 检测大小端
联合体的存放顺序是所有成员都从低地址开始存放,利用该特性可以轻松获得当前系统采用大端还是小端模式
bool isbigendian() { union num { int a; char b; }num; num.a = 0x1234; if( num.b == 0x12 ) { return true; } return false; }
4.常见的大小端
一般操作系统都是小端模式;而通讯协议是大端模式;java和平台无关,默认是大端模式
常见的cpu的大小端:
大端:powerpc、ibm、sun
小端:x86
arm既可以工作在大端模式,也可以工作在小端模式