可能重复:
Detecting endianness programmatically in a C++ program
是否有任何库函数可用于查找我的PC的字节序?
答案 0 :(得分:51)
为什么你需要一个库,如果你能找到这样的? :)
int num = 1;
if (*(char *)&num == 1)
{
printf("Little-Endian\n");
}
else
{
printf("Big-Endian\n");
}
答案 1 :(得分:6)
我不知道库函数。
您可以获取整数的地址,然后将该地址视为字符指针,并将数据写入包含整数的字节中。然后,读出整数中的实际内容,看看你是否得到了与大端或小端架构一致的结果。
答案 2 :(得分:5)
使用此代码:
union
{
uint8 c[4];
uint32 i;
} u;
u.i = 0x01020304;
if (0x04 == u.c[0])
printf("Little endian\n");
else if (0x01 == u.c[0])
printf("Big endian\n");
答案 3 :(得分:1)
没有标准功能(如C标准或POSIX标准)。
如果您的PC是运行英特尔的(Windows风格)PC,那么它就是小端的。
如果你想在你的机器上找到字节顺序,你可以使用这种技术的未完全定义的行为(但它通常可以工作 - 我没有听说过它不起作用的任何地方):
enum { BigEndian, LittleEndian };
int endianness(void)
{
union
{
int i;
char b[sizeof(int)];
} u;
u.i = 0x01020304;
return (u.b[0] == 0x01) ? BigEndian : LittleEndian;
}
此代码假设为32位int
类型(而不是64位或16位)。