今天使用%lx格式打印了一下小数33.3的16进制形式;输出为4040a66666666666;在打断点的时候查看了下内存中其存储如下图:

从上图看,随着内存增大,先存储低位数据再存储高位数据,这明显是小端存储的风格;(关于大小端可以看我的这篇博客: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