C程序如何做一個C程序確定,在運行時無論是在小端或大端CPU運行(不是編譯時), ?檢查CPU類型在運行時間上MAC
爲什麼它必須是「運行時」檢查,而不是「complie-time」,是因爲我用MAC-OSX的通用二進制格式構建程序,使用我的MAC和Intel-CPU。預計該程序可以在英特爾和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()
任何更好的方式以跨平臺的方式做到這一點?
感謝