您的位置:首页 > 其它

详解大端模式和小端模式

2017-10-15 17:05 323 查看
一, 什么是大端和小端

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储