判断机器大小端

2019-04-05  本文已影响0人  new_liziang

大小端定义

大端:是指数据的高字节保存在内存的低地址中
小端:是指数据的低字节保存在内存的低地址中

思路:

定义一个拥有一个char,int类型的联合体

union
{    
    char ch; 
    int integer;
}un;
当系统为大端时,这个联合体的内存布局为
高地址----------->低地址
char: xx
int:  xx xx xx xx

当系统为小端时,这个联合体的内存布局为
char:          xx
int:  xx xx xx xx

由于联合体共享内存,所以当char类型的成员的地址为int类型成员的低地
址时,系统为小端,所以当char类型的成员的地址为int类型成员的高地址
时,系统为大端。
[kiosk@foundation36 ~]$ vim test.c
  1 #include <stdio.h>
  2 
  3 union
  4 {
  5     char ch;
  6     int integer;
  7 }un;
  8 
  9 int main()
 10 {
 11     un.integer = 0x12345678;
 12     if(un.ch == 0x12)
 13     {
 14         printf("big\n");
 15     }
 16     else
 17     {
 18         printf("short\n");
 19     }
 20     return 0;
 21 }

[kiosk@foundation36 ~]$ gcc -o test test.c
[kiosk@foundation36 ~]$ ./test
short

第二种方法

#include<stdio.h>
union var{
        char c[4];
        int i;
};
int main(){
        union var data;
        data.c[0] = 0x04;//因为是char类型,数字不要太大,算算ascii的范围~
        data.c[1] = 0x03;//写成16进制为了方便直接打印内存中的值对比
        data.c[2] = 0x02;
        data.c[3] = 0x11;//数组中下标低的,地址也低,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!
//而把四个字节作为一个整体(不分类型,直接打印十六进制),应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。
        printf("%x\n",data.i);

}
上一篇 下一篇

猜你喜欢

热点阅读