大端系统和小端系统
时间:2009-07-31 来源:cmdblock
测试你的硬件是哪种
因为计算机硬件的不同在数据计算机内的存储方式也不同:一般分为大端存储和小端存储
一般来说IBM是大端存储Inter是小端存储 大端存储和小端存储:
大端存储:信息存储是从底字节开始
小端存储:信息存储是从高字节开始
我下面给大家举个例子就好理解了
以int为例子
0x12345678
大端存储方式为:
address 0xbfd14a80w1 0xbfd14a80w2 0xbfd14a80w3 0xbfd14a80w4
data 0x12 0x34 0x56 0x78
小端存储方式为:
address 0xbfd14a80w1 0xbfd14a80w2 0xbfd14a80w3 0xbfd14a80w4
data 0x78 0x56 0x34 0x12
下面我在给大家一个程序,来测试你的机子是那种:
#include<stdio.h>
#include<string.h>
int main()
{char boolean[6];
union
{
unsigned long bits32;
unsigned char bytes[4];
} unValue;
unValue.bytes[0] = 0;
unValue.bytes[1] = 1;
unValue.bytes[2] = 0;
unValue.bytes[3] = 0;
if (unValue.bits32 == 256)
strcpy(boolean,"true"); else
strcpy(boolean,"false");
puts(boolean);
return 0;
}
以上程序在gcc下测试通过
如果是小端返回true;
如果是大端返回false;
原理为:
struct各域的内存空间是相互独立
union里的各域共享彼此的内存空间
一般来说IBM是大端存储Inter是小端存储 大端存储和小端存储:
大端存储:信息存储是从底字节开始
小端存储:信息存储是从高字节开始
我下面给大家举个例子就好理解了
以int为例子
0x12345678
大端存储方式为:
address 0xbfd14a80w1 0xbfd14a80w2 0xbfd14a80w3 0xbfd14a80w4
data 0x12 0x34 0x56 0x78
小端存储方式为:
address 0xbfd14a80w1 0xbfd14a80w2 0xbfd14a80w3 0xbfd14a80w4
data 0x78 0x56 0x34 0x12
下面我在给大家一个程序,来测试你的机子是那种:
#include<stdio.h>
#include<string.h>
int main()
{char boolean[6];
union
{
unsigned long bits32;
unsigned char bytes[4];
} unValue;
unValue.bytes[0] = 0;
unValue.bytes[1] = 1;
unValue.bytes[2] = 0;
unValue.bytes[3] = 0;
if (unValue.bits32 == 256)
strcpy(boolean,"true"); else
strcpy(boolean,"false");
puts(boolean);
return 0;
}
以上程序在gcc下测试通过
如果是小端返回true;
如果是大端返回false;
原理为:
struct各域的内存空间是相互独立
union里的各域共享彼此的内存空间
相关阅读 更多 +