C 如何判断当前系统使用的是大端还是小端存储

今天使用%lx格式打印了一下小数33.3的16进制形式;输出为4040a66666666666;在打断点的时候查看了下内存中其存储如下图:
image
从上图看,随着内存增大,先存储低位数据再存储高位数据,这明显是小端存储的风格;(关于大小端可以看我的这篇博客:C 大端存储与小端存储

我的思考:如何让别人快速知道自己的系统是大端还是小端存储?

在网上找到了其他博主的思路:

  • 对于1这个整数,由于清楚它的2进制和16进制表示形式:0000 0000 0000 0000 0000 0000 0000 0001 (2进制) 00 00 00 01 (16进制)
  • 如果是小端存储,那么在内存中它的存储形式应该是:01 00 00 00;如果是大端存储,那么在内存中它的存储形式应该是:00 00 00 01
  • 巧用地址法,将存储1的变量a的地址交给char类型指针pchar;这样使用*pchar取值后得到的正好是第一个字节处的值;
  • 定义一个范围值为int的函数,将*pchar返回。
    代码如下
#include <stdio.h>

int is_little_endian() {
    int a = 1;
    char *pchar = (char *) &a;

    return *pchar;
}

int main(void) {
    printf("当前系统是否为小端存储: %d\n", is_little_endian());

    return 0;
}
//输出:当前系统是否为小端存储: 1

参考文章:

【C】判断当前系统是大端还是小端

posted @ 2025-11-01 12:55  BigBosscyb  阅读(1)  评论(0)    收藏  举报