一个C程序如何在运行时(而不是编译时)确定它是否在小端或大端CPU上运行?这必须是“运行时”检查,而不是“编译时”检查,因为我正在使用我的Intel CPU的MAC在通用二进制格式下构建程序。这个程序预计将在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()
有没有更好的跨平台方式来实现这个?
谢谢