详解大端模式和小端模式

来源:互联网 发布:3ds max模型导出优化 编辑:程序博客网 时间:2024/06/05 05:20

一, 什么是大端和小端

Big-Endian和Little-Endian的定义如下:

1) Little-Endian就是低位字节排列在内存的低地址端,高位字节排放在内存的高地址端

2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端

举一个简单的例子, 比如数字0x12 34 56 78在内存中的表示形式为:

二,

数组在大端小端情况下的存储:

  以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value:
  Big-Endian: 低地址存放高位,如下:
高地址
        ---------------
        buf[3] (0x78) -- 低位
        buf[2] (0x56)
        buf[1] (0x34)
        buf[0] (0x12) -- 高位
        ---------------
        低地址
Little-Endian: 低地址存放低位,如下:
高地址
        ---------------
        buf[3] (0x12) -- 高位
        buf[2] (0x34)
        buf[1] (0x56)
        buf[0] (0x78) -- 低位
        --------------
低地址

三, 如何判断机器的字节序

如下编写一个小的测试程序来判断机器的字节序:
联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员公有一块最大的存储空间,
利用该特性可以轻松的获得CPU对内存采用Little-endian还是Big-endian模式都写。
若处理器是Big-Endian的,则返回0;若是Little-Endian的,则返回1

int CheckCPUEndian(){{union w{int a;char b;}num;num.a = 1;return (num.b == 1);}}



原创粉丝点击