判断机器大小端

大小端定义

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

思路:

定义一个拥有一个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);

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,742评论 0 6
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,098评论 0 35
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 7,607评论 0 73
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 9,175评论 2 37
  • 周二下午学生的作业展,二级部丰富多彩的作业给评委老师们带来了一场美妙的视觉盛宴。 进入展室,图文并茂...
    daling李玲阅读 3,541评论 0 9