그래서 다음은 어린 아이들기본 엔디안 및 자동 변환
uint32_t ntoh32(uint32_t v)
{
return (v << 24)
| ((v & 0x0000ff00) << 8)
| ((v & 0x00ff0000) >> 8)
| (v >> 24);
}
작품에 큰 엔디안 변환합니다. 매력처럼.
나는char v[4]
에 큰 엔디안 파일에서 4 바이트를 읽고 작동하지 않는
ntoh32 (* reinterpret_cast<uint32_t *> (v))
로 위의 함수에 전달할 - 내 컴파일러 (VS 2005) 자동으로 빅 엔디안 문자로 변환하기 때문에 [4] 캐스팅을 할 때 little endian uint32_t에.
AFAIK이 자동 변환 휴대용되지 않습니다, 그래서
uint32_t ntoh_4b(char v[])
{
uint32_t a = 0;
a |= (unsigned char)v[0];
a <<= 8;
a |= (unsigned char)v[1];
a <<= 8;
a |= (unsigned char)v[2];
a <<= 8;
a |= (unsigned char)v[3];
return a;
}
이 예 (unsigned char)
이 필요 사용합니다. 예 개가 천천히.
더 좋은 방법이 있어야합니다. 누구?
아니요, VC++ 컴파일러는 엔디안을 변경하지 않습니다. 다른 컴파일러도 마찬가지입니다. 귀하의 데이터 파일은 귀하가 생각하는 엔디안 방식이 아닐 수도 있습니다. 그리고 가정을 기반으로 무언가를 "개 느리게"말하는 것은 무서운 방법입니다. –