2016-08-01 8 views
0

RawFile 클래스를 C++로 작성하고 있습니다 (이 언어는 중요하지 않습니다). 하지만, 컴파일 된 CPU가 무엇이든 라이브러리를 완전히 일반화하고 싶습니다. 시스템 false 달리 빅 엔디안 인 경우 지금은일반 파일에서 원시 파일을 읽는 방법 (little/big endian)?

, I는 2 바이트를 교환하고 true를 반환 부호없는 정수와 bool is_bigendian() 함수를 돌려 uint16_t swap16(uint16_t value) 기능을 갖는다 (I는 PDP-11 바이트를 무시하도록 결정 - 주문 계획은 매우 드물다.) 마지막으로, 나는 필자가 읽었던 원시 파일의 엔디안을 가지고있다.

질문은 다음과 같습니다. 파일 및 시스템의 엔디안 정보를 고려할 때 swap16() 함수를 적용하면 어떻게 결정할 수 있습니까?

return (file_is_big_endian || system_is_big_endian) ? swap16(value) : value; 

나는 다음과 같은 테이블 가정 : 지금은

, 나는 다음과 같은 시험을 사용하기로 결정 난이 맞다면 정말 확실하지 않다,

sytem\rawfile | little-endian | big-endian | 
-------------------------------------------- 
little-endian | No swap16() | swap16() | 
    big-endian | swap16() | swap16() | 

을, 나는 수 있습니다 무언가를 놓침.

좋은 설명 (또는 더 나은 테스트)을 환영합니다!

답변

0

난 내 자신의 질문에 대답 ...

는 사실, 나는 (는 "원시 모드"에서) 바이트 당 파일 바이트를 읽는 것을 깨달았다. 따라서 시스템 자체가 리틀 엔디안 또는 빅 엔디안이라는 사실은 무의미합니다. 당신은 단지 테스트는 단순히, 당신이 읽고있는 바이트의 집합을 순서 (여부를) 읽어 파일의 유형을 고려해야합니다 ... 그래서 : 그냥 바보 같은 질문 아마

return (file_is_big_endian) ? swap16(value) : value; 

...