比如int i = 1,如果是小端序存储,那么在内存中应该是这样的:0x01 0x00 0x00 0x00;如果是大端序存储的,在内存中应该是:0x00 0x00 0x00 0x01。
那么如何编程来判断机器是大端序存储呢还是小端序存储呢?
上代码:
#include <stdio.h> int isBigEndian() { union { int i; char c; }test; test.c = 1; return test.i != 1; } int main() { printf("%d\n", isBigEndian()); }
由于union中的int和char都是从低地址开始存储的,所以如果是小端序存储的话,对test.c赋值为一,则union应该是0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00,那么test.i的值应该也是1,那么test.c==test.i。如果是大端序存储的话,union在内存中应该是这样:0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00,那么test.i的值应该是2的8次方,即test.i==256。也就是说,如果是大端序存储的话,test.i != test.c。如果test.i != test.c,那么为大端序存储,如果相等,则为小端序存储。
时间: 2024-10-06 18:52:10