union判断CPU是little-endian还是big-endian存储

本文介绍了一种利用联合体特性来检测系统是否采用Big-endian或Little-endian字节序的方法。通过设置联合体中的整型变量为1,检查其字符型成员是否为1,以此判断系统的字节序。并提供了C语言示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

利用联合体的特殊存储方式,便能检测出来cpu所使用的事big-endian或者是little-endian的存储方式。

1.判断系统是Big liden 或者是little  ledin

方法1:
int check()
{     union check
       {
              int i;
              char ch;
       }c;
       c.i  =1;
       return (c.ch == 1);
}返回值为==1的时候为小端,不等于1的时候为大端联合体中 变量i 和ch共用同一地址空间,它们都是从低地址开始存放。变量i的值为0x00 00 00 01, 如果是小端模式则01在低地址上,ch的值如果为01则是小端模式,否则是大端模式。

//在C语言参考手册的第六章.1.2节中提供了一个移植性更好的测试程序:

#include <stdio.h>

int main( )

{

       union w

       {  

              int a;

              char b[sizeof(int)]; 

       } c;

       c.a = 1;

       if(c.b[0] == 1)

              printf("the addressing is little-endian\n");

       else if(c.b[sizeof(int)-1] == 1)

              printf("the addressing is big-endian\n");

       return 0;

}

转载于:https://www.cnblogs.com/poemCoder/p/3176343.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值