利用 union来简单的判断系统是大端还是小端

前言:

在B站上看了一个视频
up 主 给了一段代码 感觉挺有意思的 试了一试 果然

32位 4字节 int 1 在计算机中实际的编码 0x00000001

大端系统在内存表示 01 00 00 00

小端系统在内存表示 00 00 00 01

我们写个简单的函数 来判断系统是大端还是小端

union EndianTest
{
    int8_t u[4];
    int32_t i;
};

static bool isLittleEndianSystem(){
    EndianTest t;
    t.i = 1;

    qDebug()<<&t.i;
    qDebug()<<&t.u;

    return t.u[0] == 1;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug()<<isLittleEndianSystem();

    return a.exec();
}

在这里插入图片描述

他是用了一个union 共用体
这里又补充了一下 union 的知识

在这里插入图片描述

就是说
int8_t u[4];
int32_t i;
这俩的内存是一样的

在这里插入图片描述

那么 如果 i 是1 如果是小端 那么 u[0] 就是1 否则就是大端

挺有意思 挺佩服的 学以致用 分享给大家看一下

发布了171 篇原创文章 · 获赞 386 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/weixin_42837024/article/details/104287780
今日推荐