大端和小端字节序

大端和小端字节序

大端序和小端序

大端序(Big-Endian):高位字节放在内存的低地址端,低位字节放在内存的高地址端。
小端序(Little-Endian):低位字节放在内存的低地址端,高位字节放在内存的高地址端。

另一种描述:
大端序(Big-Endian):内存地址从小到大,从数字的高位(大的一端)开始存(所以叫“大端”),后面按顺序存,最终低地址端存的是数字的高位字节,而高地址端存的是数字的低位字节;这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。和我们”从左到右“阅读习惯一致。
小端序(Little-Endian):内存地址从小到大,从数字低位(小的一端)开始存(所以叫“小端”),后面按顺序存,最终低地址端存的是数字的低位字节,而高地址端存的是数字的高位字节;

记忆方法:小同大异!即小端相同,大端相反!

举例

假设我们要在存储整型数字:439041101,我们把它转为二进制,并以每8位一组分成4组,注意,要从右往左数分组,不能从左往右,因为低位在右侧,这与二进制无关,就算是十进制,八进制,十六进制,都是低位在右侧,这是人类书写和阅读习惯规定的,这与大端小端也是无关,无论是大端还是小端,对于bit(位)序,都是从右往左的(右边低位,左边高位)

11010 00101011 00111100 01001101

当然,由于直接用二进制数字太长了,不方便书写与显示,所以一般都会用十六进制的形式来表示二进制,因为16刚好是24,所以每位十六进制数都可以表示4位二进制数,8位二进制数只需要两位十六进制数来表示即可,这样显示的时候只有两位,不占地儿,方便显示,否则如果满屏都是0101那就眼花缭乱了。

以上的二进制数字转成十六进制为0x1A2B3C4D,每两位为1个字节,分别按大端和小端模式存放,示意图如下

主机字节序和网络字节序

  • 主机字节序(host byte order):电脑/服务器在内存中存储的字节序,跟不同CPU有关,x86架构的都是小端模式,比如Intel/AMD,而PowerPC、IBM Power架构是大端模式,ARM可大端也可小端,但一般都工作在小端模式;
  • 网络字节序(network byte order):为了在信息传输时,屏蔽掉不同硬件结构上的字节序的差异,TCP/IP协议规定,所有在网络上传输的多字节整数都以大端序编码。
打赏

订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

大端和小端字节序