C 程序如何在 RUN 时(不是编译时)确定它是在 Little-Endian 还是 Big-Endian CPU 上运行?
它必须是“运行时”检查而不是“编译时”的原因是因为我正在使用带有 Intel-CPU 的 MAC 以 MAC OSX 的通用二进制格式构建程序。该程序预计可在 Intel 和 Power-PC CPU 上运行。即,通过MAC上的通用二进制格式,我想使用Intel-CPU构建一个程序并在PPC CPU下运行它。
我的程序中需要 CPU 检查的逻辑是 64 位整数的主机到网络字节顺序更改函数。现在我让它盲目地交换字节顺序,这在 Intel-CPU 上工作正常,但在 PPC 上中断。这是C函数:
unsigned long long
hton64b (const unsigned long long h64bits) {
// Low-order 32 bits in front, followed by high-order 32 bits.
return (
(
(unsigned long long)
( htonl((unsigned long) (h64bits & 0xFFFFFFFF)) )
) << 32
)
|
(
htonl((unsigned long) (((h64bits) >> 32) & 0xFFFFFFFF))
);
}; // hton64b()
以跨平台方式执行此操作的任何更好方法?
谢谢