判断机器大小端的两种实现方法

本文介绍了两种判断计算机系统中数据存储顺序(大端或小端)的方法:通过指针强制类型转换和使用共用体(union)数据结构。这两种方法能够帮助开发者了解当前系统的字节序,对于编写跨平台代码具有重要意义。

判断机器大小端的两种实现方法

大端模式(Big-endian):

是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址

中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

小端模式(Little-endian):

是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,和我们的逻辑方法一致。


判断大小端方法:1、利用指针强制类型转换; 2、利用共用体所有数据共用同一块地址空间


1、利用指针强制类型转换

[cpp]  view plain  copy
  1. #include<stdio.h>  
  2. int main()  
  3. {  
  4.     int a = 1;  
  5.     char * p = (char*)&a;  
  6.     if (*p == 1)  
  7.     {  
  8.         printf("little-endian");  
  9.     }  
  10.     else  
  11.     {  
  12.         printf("big-endian");  
  13.     }  
  14.     return 0;  
  15. }  

如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0;大端的话则1在i的最高地址字节处存放。char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址,那么就可以判断p中的值是不是1来确定是不是小端。

2、利用共用体所有数据共用同一块地址空间

[cpp]  view plain  copy
  1. #include<stdio.h>  
  2. union A  
  3. {  
  4.     char c;  
  5.     int  a;  
  6. }A;  
  7. int main()  
  8. {  
  9.     A.a= 1;  
  10.     if (A.c == 1)  
  11.     {  
  12.         printf("little-endian");  
  13.     }  
  14.     else  
  15.     {  
  16.         printf("big-endian");  
  17.     }  
  18.     return 0;  
  19. }  
 联合体union的存放顺序是所有成员都从低地址开始存放,所以很容易就判别出机器的大小端了。 ^_^ 
原文:https://blog.youkuaiyun.com/My_heart_/article/details/51702277
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值