大小端及其检测

本文介绍了大小端的概念,并提供了三种检测系统大小端模式的方法。通过分析代码逻辑,阐述了如何根据字节存储顺序判断系统是小端还是大端模式。
摘要由CSDN通过智能技术生成

原文分享:
[这里写链接内容] (https://blog.csdn.net/a1414345/article/details/52156766)
检测大小端的方式:
以下是我对代码的理解
代码1:

int check()
{
    union
    {
        char c;
        int i;
    }un;
    un.i=1;
    return un.c;
}

void main()
{
    if(check()==1)
        cout<<"小端"<<endl;
    else
        cout<<"大端"<<endl;
}

分析如下:假设我们的系统是小端模式:
这里写图片描述
此时我们输出c的值就相当于只取4个字节中的第一个字节,此时得到的结果就为1,但若系统是大端模式,得到的结果就为0。下同。

代码2:

int check()
{
    int i=1;
    i=*(char*)&i;//int占4个字节,强转称char型,如果是小端,1就会存储在低地址的第一个字节,
                //若为大端,1会存储在高位置的第一个字节,强制取出来的低地址的数就不为1
    return i;
}

void main()
{
    if(check()==1)
        cout<<"小端"<<endl;
    else
        cout<<"大端"<<endl;
}

代码3:

int check()
{
    union
    {
        char a[4];
        int i;
    }un;
    un.i=1;

    for(int i=0;i<4;++i)
        cout<<(int)un.a[i]<<" ";
    cout<<endl;
    return un.a[0];
}

void main()
{
    if(check()==1)
        cout<<"小端"<<endl;
    else
        cout<<"大端"<<endl;
}

代码3:

#include <stdio.h>  
int check()  
{  
    union UN  
    {  
        char a [4];  
        int i ;  
    } un ;  
    un .i = 1;  
        //02 是整数不够2位就补上0  x是以16进制输出  hhx 表示只输出两位  
    printf ("%02hhx %02hhx %02hhx %02hhx\n", un .a [0], un. a [1],un . a[2], un .a [3]);  
    return un . a[0];  
}  

int main(void)  
{  
    if(check()==1)  
        printf("小端\n");  
    else  
        printf("大端\n");  
    return 0;  
}  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值