判断大端还是小端存储

 所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。比如0x12345678在大端机上是12345678,在小端机上是78564312,而一个主机是大端还是小端要看cpu类型以及运行在上面的操作系统。同一款cpu在不同的操作系统使用的大小端情况是不同的。当然我们通常使用的x86+windows是小端。

 
测试大小端一般使用union的特性。union是一个联合体,所有变量公用一块内存,只是在不同的时候解释不同。其在内存中存储是按最长的那个变量所需要的位数来开辟内存的
#include <stdio.h>
union
{
    int number;
    char s;
} test;
int testBigEndin()
{
    test.number = 0x01000002;
    return (test.s == 0x01);
}

void main()
{
    if (testBigEndin())
    {
        printf("big\n");
    }
    else
    {
        printf("small\n");
    }
}
其中union的实际内存长度是int,即一个字,在32位机上是32位。而char是一个byte,只会取第一个低地址字节。所以他的值可以用来判断大小端。
posted @ 2017-05-08 16:02  Cloud2020  阅读(551)  评论(0)    收藏  举报