一、定义

  • Little-Endian 低位字节放在内存的低地址端,高位字节放在内存的高地址端。

  • Big-Endian 高位字节放在内存的低地址端,低位字节放在内存的高地址端

      例如:0x12 34 56 78在内存中的表现形式
       小端模式:
          低地址------------------à高地址
          0x78         0x56  0x34     0x12
       大端模式:
          低地址------------------à高地址
          0x12         0x34  0x56     0x78
    

    二、优劣势、

  • Little-Endian 强制转换不需要调整字节内容,1、2、4字节的存储方式一样。

  • Big-Endian 符号位的判断固定为第一字节,容易判断正负。

    三、为什么有大小端之分?

  • 字节为计算机内存的基本单位,每一个内存地址都对应一个字节,而已数据又不仅仅有char,还有short、int等,寄存器的宽度大于一个字节,必然存在排列的问题。常见的X86结构是小端模式,而KEIL C51是大端模式。很多的ARM、DSP都为小端模式。还有一些RAM是由硬件的选择处理为大端还是小端模式。

    四、常见的字节序

  • 一般操作系统为小端模式,而通讯协议为大端模式。

  • 常见的CPU
    • Big-Endian:PowerPC、IBM、Sun

    • Little-Endian:x86、DEC

    • ARM既可以工作在大端模式也可以工作在小端模式。

  • 常见的文件字节序
    • Big-Endian:Adobe PS、JPEG MacPaint

    • Little-Endian:BMP、GIF、RTF

    • Java和所有的网络通讯协议都是使用Big-Endian的编码。