大端和小端

原创 2015年07月06日 18:49:14

下面所说的顺序对于存储器来说都是从低地址到高地址:

基本概念

小端(little endian)存储:在存储器中按照最低有效字节到最高有效字节的顺序存储对象。
大多数Intel兼容机采用这种规则。
大端(big endian)规则:在存储器中按照最高有效字节到最低有效字节的顺序存储对象。
大多数IBM和Sun Microsystems的机器采用这种规则,只是大多数,不是按照企业来划分,IBM和Sun的制造的个人计算机使用的是Intel兼容的处理器(小端法)。
双端法(bi-endian):有些比较新的微处理器使用双端法(bi-endian),可以把它们配置成作为大端或者小端的机器运行。

示例

假设一个int数值,位于地址0x100处,它的16进制值是0x01234567,那么它们在虚拟存储器中的排列位置如下:
这里写图片描述

注意:在字0x01234567,高位字节的十六进制值为0x01,而低位字节值为0x67。

区别

但是到底是使用大端还是小端的字节顺序存储,没有技术上的差别。对我们来说,机器所使用的字节顺序是完全不可见的,无论为哪种类型的机器编译的程序都会得到相同的结果。但是字节顺序会成为问题:

  1. 在不同类型的机器之间通过网络传送二进制的数据时,一个常见的问题就是当小端法机器产生的数据被送到大端法机器或者反方向发送时会发现,接收程序字里的字节成了反序的。为了避免这个问题,网络应用程序的代码编写必须遵守已经建立的关于字节顺序的规则,以确保发送方机器将它的内部表示转换成网络标准,而接收方机器则将网络标准装换成它的内部表示。
  2. 阅读表示整数数据的字节序列时字节顺序也很重要,一般是在小端法机器上,当阅读小端法机器生成的机器级程序时,经常会将字节按照相反的顺序显示,主要是因为书写字节序列的时候从左到右是最低位字节到最高位字节(从低地址到高地址),但是书写数字时则是从左到右从高位到低位,在小端机器上正好相反。
    下面的代码是由反汇编器生成的,是Intel IA32处理器的机器级代码的文本表示:
    80483bd: 01 05 64 94 04 08 add %eax,0x8049464
    可以看出十六进制字符串01 05 64 94 04 08是一条指令的字节级表示,这条指令把一个字长的数据加到存储在主存地址0x8049464的值上。我们可以发现这个字节序列的后四个字节就是add指令右边的数值,但是是相反的顺序,这个就是小端法的阅读上的缺点。
  3. 强制类型转化(cast)时,会发现int类型12345和float类型12345.0,都是4个字节,但是每个字节的值不同。

【转】轻松记住大端小端的含义(附对大端和小端的解释)

转自:http://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html        或许你曾经仔细了解过什么是大端小端,也动手编...
  • firstlai
  • firstlai
  • 2015年11月18日 20:50
  • 1472

C++大端小段的判断和转换

当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-en...
  • ClamReason
  • ClamReason
  • 2013年12月09日 09:52
  • 3139

大端字节序和小端字节序

对表示一个对象的字节序列排序,有两个同用的规则。有些机器选择在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,而另一些机器按照从最高有效字节到最低有效字节的顺序存储。前一种规则——最低有效字节...
  • qq_33724710
  • qq_33724710
  • 2016年04月04日 14:50
  • 1714

编译器的大小端模式

大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放 在高地址中。 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放 ...
  • weiqifa0
  • weiqifa0
  • 2014年04月29日 14:23
  • 1706

字节存储排序:大端和小端的判别及转换

当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-en...
  • u010193457
  • u010193457
  • 2016年09月14日 22:43
  • 2882

ARM9的存储结构~~大端存储和小端存储

众所周知ARM9的每个地址对应的是一个存储字节而不是一个存储字,但ARM9可以访问存储字,访问存储字时,其地址应该是字对准,即字地址可以被四整除,也就是说,若第1个字在存储空间中是第0个地址对应单元(...
  • u011308691
  • u011308691
  • 2013年11月29日 14:50
  • 1803

判断一台机器是大端序还是小端序

存储模式:大端模式和小端模式。 大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。 小端模式(Little_endian):字数据的高字节存...
  • banbanlin
  • banbanlin
  • 2014年09月25日 16:41
  • 2609

大端格式、小端格式

大端格式、小端格式 大端格式: 在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图2.1所示:   图2.1 小端...
  • chivalrousli
  • chivalrousli
  • 2014年08月07日 15:52
  • 1174

判断计算机是大端还是小端

介绍计算机有little endian(小端)和big endian(大端)之分,两张从 维基百科盗来的图就可以说明它们的区别:对于32位的整数,大端机器会在内存的低地址存储高位,在高地址存储低位。小...
  • lwfcgz
  • lwfcgz
  • 2016年01月07日 14:22
  • 2387

对于字节序小端和大端的思考

从网上可以查到的大小端的解释,小端是低端数据存放在低端地址,大端是高端数据存在低端地址。大小端真的就这么简单吗,不是这样的。 可以这样理解: 对于小端处理器,如果要寻址一个word型数据,处理器首...
  • skyflying2012
  • skyflying2012
  • 2014年12月21日 23:06
  • 3442
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大端和小端
举报原因:
原因补充:

(最多只允许输入30个字)