判断系统是大端还是小端

2023-05-16

文章目录

  • 大端与小端
  • 判断大端、小端的三种方式
    • 直接观察变量的内存值
    • 强制转换:将&int转换为char*
    • 使用联合体union进行判断

大端与小端

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

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

直接观察变量的内存值

#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

判断系统是大端还是小端 的相关文章

随机推荐