如何使用C以编程方式找到PC的Endian-ness?

可能重复:
在C ++程序中以编程方式检测字节顺序

是否有任何库函数可用于查找我的PC的字节序?

为什么你需要一个图书馆,如果你能找到这样的? 🙂

int num = 1; if (*(char *)&num == 1) { printf("Little-Endian\n"); } else { printf("Big-Endian\n"); } 

我不知道库函数。

您可以获取整数的地址,然后将该地址视为字符指针,并将数据写入包含整数的字节中。 然后,读出实际上在整数中的内容,看看你是否得到与大端或小端架构一致的结果。

使用此代码:

 union { uint8 c[4]; uint32 i; } u; ui = 0x01020304; if (0x04 == uc[0]) printf("Little endian\n"); else if (0x01 == uc[0]) printf("Big endian\n"); 

没有标准function(如C标准或POSIX标准)。

如果您的PC是运行英特尔的(Windows风格)PC,那么它就是小端的。

如果你想在你的机器上找到字节顺序,你可以使用这种技术的未完全定义的行为(但它通常可以工作 – 我没有听说过它不起作用的任何地方):

 enum { BigEndian, LittleEndian }; int endianness(void) { union { int i; char b[sizeof(int)]; } u; ui = 0x01020304; return (ub[0] == 0x01) ? BigEndian : LittleEndian; } 

此代码假定采用32位int类型(而不是64位或16位)。