判断系统是大端还是小端

大端与小端

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

判断大端、小端的三种方式

直接观察变量的内存值

#include <iostream>
using namespace std;

int main()
{
        short a = 0x3839;
        char *p = (char *)&a;
        printf("%x\n%x\n", p[0], p[1]);
        return 0;
}

运行结果如下图(ubuntu 18.04LTS):
在这里插入图片描述

在源程序中,我们输入的是0x3839,39对应低地址,存到了p[0]中、为低字节,所以测试的系统为小端

强制转换:将&int转换为char*

#include <iostream>
using namespace std;

int main()
{
        int a = 1;
        if (*(char *)&a == 1)
                cout << "small endian." << endl;
        else
                cout << "big endian." << endl;
        return 0;
}

运行结果如下图(ubuntu 18.04LTS):
在这里插入图片描述

在源程序中,将&int强制转换成了char *,则该指针指向的是a的低地址,若指向0x01则说明为小端,否则为大端

使用联合体union进行判断

#include <iostream>
using namespace std;
union TEST {
        int a;
        char b;
};
int main(int argc, char *argv[])
{
        TEST test;
        test.a = 1;
        if (test.b == 1)
        {
                cout << "small endian." << endl;
        }
        else
        {
                cout << "big endian." << endl;
        }
        return 0;
}

运行结果如下图(ubuntu 18.04LTS):
在这里插入图片描述

---------------------------------------简单表格分析-------------------------------------------

					表1-1 0x1234abcd分别在大端与小端的内存地址增长方向
地址big endiansmall endian
0x00000x120xcd
0x00010x340xab
0x00020xab0x34
0x00030xcd0x12
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值