目录
计算机中以字节为单位,每个地址对应一个字节,一个字节8bit。在计算机系统中,如果大于一个字节,就需要区分字节顺序。常见的字节顺序分为:大端(Big Endian)和小端(Litter Endian)。想要理解什么是大端和小端,首先需要明确下面几个概念。
1.高字节和低字节
什么是高字节?什么是低字节?
在一个n进制的位中,最左边的位叫最高有效位,最右边的叫最低有效位。
举个例子,1个int的整数123456789
二进制表示:0000 0111 0101 1011 1100 1101 0001 0101
十六进制表示: 07 5B CD 15
按照从右向左的方向,二进制中,0101是低字节,最左边的0000是高字节;十六进制中,15是低字节,07是高字节
2.高地址和低地址
在内存中,多字节对象都是被存储为连续的字节序列。假设将int整型在内存中的起始地址(首个字节存储位置)为0x1000,那么另外三个字节就存储在0x1001~0x1003。不管存储的字节顺序是怎样的,内存地址的分配都是从小到大的增长。其中0x1000称为低地址端,0x1003称为高地址端。
3.大端和小端
大端:高字节存放在低地址,低字节存放在高地址
小端:低字节存放在低地址,高字节存放在高地址
还是以上面的int 123456789为例,十六进制表示: 07 5B CD 15
内存地址(低——>高) | 字节存储顺序 | ||
大端(Big Endian) | 0x1000 0x1001 0x1002 0x1003 | 0x07 0x5B 0xCD 0x15 | 高字节存放在低地址 低字节存放在高地址 |
小端(Litter Endian) | 0x1000 0x1001 0x1002 0x1003 | 0x15 0xCD 0x5B 0x07 | 低字节存放在低地址 高字节存放在高地址 |
4.网络字节序和主机字节序
大小端一般是由CPU架构决定的。
网络字节序(Network Order):TCP/IP各层协议将字节序定义为Big Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。
主机字节序(Host Order):整数在内存中保存的顺序,它遵循Little Endian规则(不一定,要看主机的CPU架构)。所以当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机序列(Little Endian)和网络序(Big Endian)的转换。
参考连接: https://www.cnblogs.com/Leo_wl/p/3427363.html