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

Din*_*esh 14 c endianness

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

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

COD*_*BOY 51

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

int num = 1;

if (*(char *)&num == 1)
{
    printf("Little-Endian\n");
}
else
{
    printf("Big-Endian\n");
}
Run Code Online (Sandbox Code Playgroud)

  • int num = 1将存储为000.0001或100.000,具体取决于字节顺序.(char*)&num将指向该int的第一个字节.现在,如果该字节读取1,那么它的小端,否则大端. (11认同)

Eri*_* J. 6

我不知道库函数.

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


Kam*_*uri 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");
Run Code Online (Sandbox Code Playgroud)

  • @Artur:哈哈哈哈!还有其他选择:PDP11以big-endian顺序使用16位字...字节中的字节采用little-endian顺序(可能反之亦然 - 现在已经是不久前了). (2认同)