计算机系统中,每一个地址单元对应一个字节(8bit),一种数据类型的数据可能占用若干字节。如何安排这种数据类型中的各个字节,哪一个字节在低地址哪一个在高地址,以及一个字节中的各个比特的排列,这就牵涉到大小端模式。也就是你们常说的字节序和比特序问题。字节序和比特序通常是一致的,要么都是大端,要么都是小端。java
大端模式:低位(字节/比特)放在高地址中,高位(字节/比特)放在低地址中。
小端模式:低位(字节/比特)放在低地址中,高位(字节/比特)放在高地址中。
高位和地位是对于咱们正常阅读和书写来讲,最开始是高位,例如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 0dspa
联合体的存放顺序是全部成员都从低地址开始存放,利用该特性能够轻松得到当前系统采用大端仍是小端模式操作系统
BOOL IsBigEndian() { union NUM { int a; char b; }num; num.a = 0x1234; if( num.b == 0x12 ) { return TRUE; } return FALSE; }
通常操做系统都是小端模式;而通信协议是大端模式;java和平台无关,默认是大端模式
常见的cpu的大小端:
大端:PowerPC、IBM、Sun
小端:x86
ARM既能够工做在大端模式,也能够工做在小端模式code