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

时间:2011-12-20 05:13:55

标签: c endianness

  

可能重复:
  Detecting endianness programmatically in a C++ program

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

4 个答案:

答案 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位)。