1、字节序(byte order)
大端存储格式:即多字节数据的高字节存储在低地址中,而低字节数据存放在高地址中。
小端存储格式:即多字节数据的高字节存储在高地址中,而低字节数据存放在低地址中。
例子:short类型的数据 0x0201
大端存储格式
存放内容 | 0x02 | 0x01 |
内存地址 | 低地址:0x0001 | 高地址:0x0002 |
小端存储格式
存放内容 | 0x01 | 0x02 |
内存地址 | 低地址:0x0001 | 高地址:0x0002 |
2、位序(bit order)
在字节内部也存在大小端问题,相应的大小端定义为:
大端存储格式:即多位数据的高位存储在字节的低位中,而低位数据存放在高位中,且从内存的高位开始存放。
小端存储格式:即多位数据的高位存储在字节的高位中,而低位数据存放在低位中,且从内存的低位开始存放。
注意:若多位数据大于1byte(8bit),则先按字节序中大小端的定义分配相应大小的位数据到相应的字节中,再按位序大小端定义分配到相应的位地址。
例如:
struct s{
short bit1:4;
short bit2:9;
short bit3:3;
};
s sA;
sA.bit1=0b3210;//此处数字(3)仅表示输入时,在字节中所处的位数(第3位,真实数据为(0或1)*2^3)
sA.bit2=0b876543210;
sA.bit3=0b210;
大端存储格式
存放内容 | sA.bit1(0b0123) | sA.bit2(0b5678) | sA.bit2(0b01234) | sA.bit3(0b012) | ||||||||||||
0b01235678 | 0b01234012 | |||||||||||||||
位数据 | 0 | 1 | 2 | 3 | 5 | 6 | 7 | 8 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 |
位地址 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
内存地址 | 低地址:0x0001 | 高地址:0x0002 |
小端存储格式
存放内容 | sA.bit2(0b3210) | sA.bit1(0b3210) | sA.bit3(0b210) | sA.bit2(0b87654) | ||||||||||||
0b32103210 | 0b21087654 | |||||||||||||||
位数据 | 3 | 2 | 1 | 0 | 3 | 2 | 1 | 0 | 2 | 1 | 0 | 8 | 7 | 6 | 5 | 4 |
位地址 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
内存地址 | 低地址:0x0001 | 高地址:0x0002 |