Big-Endian和Little-Endian的判断,以及我写的C语言测试程序

来源:互联网 发布:三中三复式计算器软件 编辑:程序博客网 时间:2024/06/11 01:48

1,什么是字节顺序

指的就是数据在内存里存储的顺序,通常我们默认一个存储单元为1Byte,一个逻辑数据比如Float是4个Byte,它在内存理存储的顺序可以是高字节在前,也可以是低字节在前.这样就有区分了.

2,有些什么顺序:

Big-Endian(MSB),高字节在低地址  中文称“大端”

Little-Endian(LSB),低字节在低地址 中文称“小端”


3,为什么要有字节顺序?

因为程序需要与外界通讯,传送数据,这里的外界包括其他机器和其他语言写的程序.比如x86下c++程序与linux底下的程序通讯,比如c++和java的程序通讯.都会涉及到字节存放顺序的问题.


4,哪些会是Big-Endian,哪些会是Little-Endian

网络协议都是Big-Endian的,Java编译的都是Big-Endian的

Motorola的PowerPC是Big-Endian的

x86系列则采用Little-Endian方式存储数据。

ARM同时支持 big和little,实际应用中通常使用Little-Endian


5.  我的示例程序,可以测试本机CPU是哪种Endian
/************************************************************
 * Name:        check_endian() by stephenzhu 2012/03/15
 * Fuction:     to check the CPU's Byte order(Big or Little Endian)
 *
 * Big-Endian:
 *      IBM
 *      Motorola PowerPC
 *      Sun
 * Little-Endian:
 *      x86
 *      arm default
 * (ARM's Endian is configuable, default is Little-Endian)
 * *********************************************************/
void check_endian(void)
{
        unsigned short thenumber=0xaabb;
        if( *((unsigned char *)&thenumber) == 0xaa)
                printf("Big Endian.\n");
        else
                printf("Little Endian.\n");
}
原创粉丝点击