如何使用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位)。