分享

Big-endian和little-endian

 iversion 2008-02-25
Big-endian和little-endian
 

存在如果说"word或者说字长根本就没关系",假设有一数据文件里面有N多数顺序排布,如果想以Little-Endian format 读入内存某区域,那么应该怎么读?怎么排?这样的问题是由于对于endian的实质理解的偏差,endian指的是当物理上的最小单元比逻辑上的最小单元小时,逻辑到物理的单元排布关系。这里的有一数据文件里面有N多数顺序排布,这个有一数据显然不是逻辑上的最小单元,而其中“N多数的一个才是逻辑最小单元,于是可应用楼主表格中的原则排列,而“N多数之间的顺序则是由这“N多数的宿主决定的,比如是你写的程序,这个顺序由你决定。

刚才谈到了,endian指的是当物理上的最小单元(内存单元)比逻辑上的最小单元(通常指字长,即一个word)小时,逻辑到物理的单元排布关系。咱们接触到的物理单元最小都是byte,在通信领域中,这里往往是bit,不过原理也是类似的。

实践可以给你更多的经验,比如在一个嵌入式系统的通信协议中,从底层射频驱动到上层的协议栈全部需要实现,那么很可能遇到多个endian的问题,底层的bit序、协议层的byte序、应用层的byte序,这些都是不同的概念。


Big-Endian
Little-Endian 字节排序
  
字节排序                  含义
Big-Endian    
一个Word中的高位的Byte放在内存中这个Word区域的低地址处。
Little-Endian  
一个Word中的低位的Byte放在内存中这个Word区域的低地址处。
必须注意的是:表中一个Word的长度是16位,一个Byte的长度是8位。如果一个数超过一个Word的长度,必须先按Word分成若干部分,然后每一部分(即每个Word内部)Big-Endian或者Little-Endian的不同操作来处理字节。 一个word的低位在右边,左高右低。

一个例子:
如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
           big-endian   little-endian
0x0000      0x12        0xcd
0x0001      0x34        0xab
0x0002      0xab        0x34
0x0003      0xcd        0x12

除了moto68K系列和decsparcbig endian外,常见的cpu都是little endianARM同时支持 biglittle,实际应用中通常使用little endian

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多