写个程序判断系统是32位or64位及大端or小端字节序

1. 直接打印出指针占多少字节,4字节为32位系统,8字节为64位系统。

2. 大小端判断:

小端:低地址存放数的低位(如:X86)

大端:低地址存放数的高位(如:网络字节顺序)

(ARM大小端都支持)

假设数0x1234从0x0000开始存放,小端顺序为:

内存地址 存放内容
0x0000 0x34
0x0001 0x12

大端顺序为:

内存地址 存放内容
0x0000 0x12
0x0001 0x34

采用union判断,union的成员都是从低地址开始存放: 

union U{
    short a;
    char b;
};

int main(){
    U u;
    u.a=0x1234;
    puts(u.b==0x34?"Little endian":"Big endian");
} 

如果是在linux下,可以直接使用宏:

printf("Little endian:%d\n",__LITTLE_ENDIAN);//in stdlib.h
printf("Big endian:%d\n",__BIG_ENDIAN);
printf("mine:%d\n",__BYTE_ORDER);
posted @ 2017-03-22 15:21  poluner  阅读(1932)  评论(0编辑  收藏  举报