我们常用的X结构是小端模式而KEILC则为大端模式。很多的ARMDSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。Note:采用大端方式进行数据存放符合人类的正常思维而采用小端方式进行数据存放利于计算机处理。(我的理解:小端模式在低字节就放一个低位)下面这段代码可以用来测试一下你的编译器是大端模式还是小端模式:intmain(){shortintxcharx,xx=xx=*((char*)x)低地址单元,或者((char*)x)x=*((char*)x)高地址单元,或者((char*)x)printf("x=xnx=xn",x,x)}若x=x,则是大端若x=x,则是小端大端(BigEndian)与小端(LittleEndian)详解【大端(BigEndian)与小端(LittleEndian)简介】ByteEndian是指字节在内存中的组织所以也称它为ByteOrdering或ByteOrder。对于数据中跨越多个字节的对象我们必须为它建立这样的约定:()它的地址是多少()它的字节在内存中是如何组织的针对第一个问题有这样的解释:对于跨越多个字节的对象一般它所占的字节都是连续的它的地址等于它所占字节最低地址。(链表可能是个例外但链表的地址可看作链表头的地址)。比如:intx它的地址为×。那么它占据了内存中的Ox×××这四个字节(位系统所以int占用个字节)。上面只是内存字节组织的一种情况:多字节对象在内存中的组织有一般有两种约定。考虑一个W位的整数。它的各位表达如下:XwXwXX,它的MSB(MostSignificantByte最高有效字节)为XwXwXwLSB(LeastSignificantByte最低有效字节)为XXX。其余的字节位于MSBLSB之间。LSB和MSB谁位于内存的最低地址即谁代表该对象的地址这就引出了大端(BigEndian)与小端(LittleEndian)的问题。如果LSB在MSB前面既LSB是低地址则该机器是小端反之则是大端。DEC(DigitalEquipmentCorporation现在是Compaq公司的一部分)和Intel的机器(X平台)一般采用小端。IBMMotorola(PowerPC)Sun的机器一般采用大端。当然这不代表所有情况。有的CPU即能工作于小端又能工作于大端比如ARMAlpha摩托罗拉的PowerPC。具体情形参考处理器手册。具体这类CPU是大端还是小端应该和具体设置有关。(如PowerPC支持littleendian字节序但在默认配置时是bigendian字节序)一般来说大部分用户的操作系统(如windows,FreeBsd,Linux)是LittleEndian的。少部分如MACOS,是BigEndian的。所以说LittleEndian还是BigEndian与操作系统和芯片类型都有关系。Linux系统中你可以在usrinclude中(包括子目录)查找字符串BYTEORDER(或BYTEORDER,BYTEORDER)确定其值。BYTEORDER中文称为字节序。这个值一般在endianh或machineendianh文件中可以找到,有时在featureh中不同的操作系统可能有所不同。对于一个数×使用LittleEndian方式时低字节存储×高字节存储×而使用BigEndian方式时,低字节存储×,高字节存储×经一网友指正,才知道,上面的描述,是不准确的想了下,觉得如下描述可能更合适:使用LittleEndian方式存储数据时,数据的LSB相对最没意义的数据位,存放在低地址位置,这里的LSB也就是了也即,低地址存储×,高地址存储×而使用BigEndian方式存储数据时,数据的MSB最有意义的数据位,存放在低地址位置,这里的MSB也就是了也即低地址存储×,高地址存储×助记:)所谓MSB(MostSignificantByte),名字很复杂,不知是否有人没搞懂,反正我开始看到这个词时候,就很糊涂,有点不完全理解其实简单说MSB就是,一个数字中,最重要的那位,举例来说,,中文读作,一万两千零四,那最高位的,就表示了一万,此处就称作MSB,最有意义的位)一般常见的数据存储,用文字写出来的时候,其内容书写格式,多数是从低地址到高地址(更符合人类思维的原因)举例,一个进制数是×,而存放的位置是地址×中存放地址×中存放地址×中存放连起来就写成地址××中存放了数据×而这种存放和表示方式,正好符合大端解释的有点乱,希望有人能看懂如果还有哪里有误,还请各位继续指正谢谢【用函数判断系统是BigEndian还是LittleEndian】boolIsBigEndian()如果字节序为bigendian返回true反之为littleendian返回false{unsignedshorttest=×if(*((unsignedchar*)test)==×)returnTRUEelsereturnFALSE}IsBigEndian()大端模式与小端模式一、概念及详解在各种体系的计算机中通常采用的字节存储机制主要有两种:bigendian和littleendian即大端模式和小端模式。先回顾两个关键词MSB和LSB:MSB:MostSignificantBit最高有效位LSB:LeastSignificantBit最低有效位大端模式(bigedian)bigendian:MSB存放在最低端的地址上。举例双字节数×以bigendian的方式存在起始地址×中:|data|<–address|×|<–×|×|<–×在BigEndian中对于bit序列中的序号编排方式如下(以双字节数×BA为例):bit||MSBLSBval|||–=×BA小端模式(littleendian)littleendian:LSB存放在最低端的地址上。举例双字节数×以littleendian的方式存在起始地址×中:|data|<–address|×|<–×|×|<–×在LittleEndian中对于bit序列中的序号编排和BigEndian刚好相反其方式如下(以双字节数×BA为例):bit||MSB–LSBval|||=×BA二、数组在大端小端情况下的存储:以unsignedintvalue=×为例分别看看在两种字节序下其存储情况我们可以用unsignedcharbuf来表示value:BigEndian:低地址存放高位如下:高地址buf(×)低位buf(×)buf(×)buf(×)高位低地址LittleEndian:低地址存放低位如下:高地址buf(×)高位buf(×)buf(×)buf(×)低位–低地址下面是赠送的中秋节演讲辞不需要的朋友可以下载后编辑删除~~~谢谢中秋佳节演讲词推荐