大端和小端

原创 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个字节,但是每个字节的值不同。

相关文章推荐

关于大小端--大端 小端 大小端

  • 2011年07月23日 18:08
  • 49KB
  • 下载

彻底弄懂计算机中的大端小端

大端与小端这个问题在做和其他设备交换原始字节数据的时候是非常重要的概念,也是必须要掌握的内容,但是很多人就是仅仅是稍微有些了解,但每次真正去做东西的时候,还是要花半天去想,博主就是这样的人,出现这样问...

大端小端模式

  • 2014年03月04日 17:57
  • 19KB
  • 下载

【技巧】用union验证机器为大端还是小端

首先说说,联合体在内存中是怎么存储的。
  • jiasike
  • jiasike
  • 2014年10月11日 16:43
  • 1001

大端小端 简单描述

  • 2011年09月27日 14:12
  • 14KB
  • 下载

小端大端透析-附检测代码

  • 2015年05月16日 12:10
  • 68KB
  • 下载

测试自己的系统是大端还是小端

BIG ENDIAN:最低位地址存放高位字节,可称高位优先,内存从最低地址开始按顺序存放(高数位数字先写)。最高位字节放最前面。 LITTLE ENDIAN:最低位地址存放低位字节,可称低位优先,内存...

详解大端模式和小端模式

  • 2015年02月05日 10:28
  • 32KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大端和小端
举报原因:
原因补充:

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