认识(大端-小端)端模式

转载 2011年10月13日 10:00:10

    端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。下文举例说明在计算机中大小端模式的区别。

    如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。为简单起见,这里使用OP0表示一个32位数据的最高字节MSB(Most Significant Byte),使用OP3表示一个32位数据最低字节LSB(Least Significant Byte)。

地址偏移   大端模式    小端模式
 0x00      12(OP0)   78(OP3)
 0x01      34(OP1)   56(OP2)
 0x02      56(OP2)   34(OP1)
 0x03      78(OP3)   12(OP0)

    如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。

地址偏移    大端模式    小端模式
 0x00       12(OP0)   34(OP1)
 0x01       34(OP1)   12(OP0)

    由上表所知,采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将低位存放在低地址。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。

    有的处理器系统采用了小端方式进行数据存放,如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放,如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器,一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。

    因此在一个处理器系统中,有可能存在大端和小端模式同时存在的现象。这一现象为系统的软硬件设计带来了不小的麻烦,这要求系统设计工程师,必须深入理解大端和小端模式的差别。大端与小端模式的差别体现在一个处理器的寄存器,指令集,系统总线等各个层次中。

    判断大端小端

 

int i=1;
char *p=(char *)&i;
if(*p==1)
  printf(
"Little-Endian\n");
else
  printf(
"Big-Endian\n");

 

    大小端存储问题,如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0.大端的话则1在i的最高地址字节处存放,char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址,那么就可以判断p中的值是不是1来确定是不是小端。

    我们常用的x86结构是小端模式,而Keil C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。


大端存储和小端存储的区别

小端存储:较低的有效字节存放在较低的存储器地址,较高的字节存放在较高的存储器地址; 大端存储:较低的有效字节存放在较高的存储器地址,较高的字节存放在较低的存储器地址。 目前手机芯片...
  • n289950578
  • n289950578
  • 2014-03-27 15:11:00
  • 5378

测试平台大端还是小端(网络字节序和主机字节序)

大端和小端(网络字节序和主机字节序): 大端(Big Endian):即网络字节序。 小端(Littile Endian):即主机字节序。 记忆方式:网络的范围很大,所以大端是网络字节序。 大...
  • feifeiwuxian
  • feifeiwuxian
  • 2015-12-29 15:37:01
  • 1152

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

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

字节序——大端(Big Endian)和小端(Little Endian)

每次碰到这个问题都需要现查资料,脑子不够用啊,索性就把它的来龙去脉写下来,加深一下印象。 1. 字节序问题的存在原因 自计算机采用byte作为存储单位起,字节序就是一个有争议的话题。这是因为我们通...
  • scaleqiao
  • scaleqiao
  • 2015-01-17 17:27:57
  • 1015

大端小端格式详解

1. 什么是大端,什么是小端: 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存...
  • zhaoshuzhaoshu
  • zhaoshuzhaoshu
  • 2014-07-09 16:30:01
  • 62401

C语言判断cpu是大端还是小端。

1.大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端模式相反  2.为什么有大小端之分???  因为在计算机系统中,存储是以字节为单位的,每个...
  • jack2164
  • jack2164
  • 2013-11-22 22:18:14
  • 1153

大端存储和小端存储,网络字节序

不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 最常见的有两种 1. Little endian:将低序字节存储在起始地址 2. Big endian:将高序字...
  • eastlhu
  • eastlhu
  • 2014-03-03 21:07:55
  • 1017

计算机大端模式和小端模式 内存对齐问题(sizeof)

一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个...
  • yangcs2009
  • yangcs2009
  • 2014-09-30 19:08:25
  • 3473
收藏助手
不良信息举报
您举报文章:认识(大端-小端)端模式
举报原因:
原因补充:

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