C 프로그램이 실행 시간 (컴파일 시간 아님)에서 이 Little-Endian 또는 Big-Endian CPU에서 실행되는지 여부를 어떻게 결정합니까?MAC에서 C 프로그램의 RUN 시간에 CPU 유형을 확인하십시오
Intel-CPU가있는 MAC을 사용하여 MAC OSX의 Universal Binary 형식으로 프로그램을 작성하기 때문에 "실행 시간"확인이 아닌 "complie-time"이 필요한 이유가 있습니다. 이 프로그램은 Intel 및 Power-PC CPU 모두에서 실행됩니다. 즉, MAC의 Universal Binary 형식을 통해 Intel-CPU를 사용하는 프로그램을 만들고 PPC CPU에서 실행하고 싶습니다.
CPU 체크가 필요한 내 프로그램의 논리는 64 비트 정수의 호스트 - 네트워크 바이트 순서 변경 기능입니다. 바로 지금 나는 그것이 맹목적으로 인텔 - 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()
크로스 플랫폼 방식으로이를 수행하는 더 좋은 방법은 무엇입니까?
감사