단일 정밀도 값이 n 인 이진 파일이 있습니다. 필자는 데이터를 쓸 때 사용 된 형식이 빅 엔디안 (big-endian)이라는 것을 알고 있습니다. 데이터를 float vector (아래 코드의 'mainvector')로 읽어 들이면 기본적으로 리틀 엔디안 형식으로 데이터가 읽혀집니다. 유래 자체에 대한 엔디 언 및 변환에 대한 많은 논의가있다C++ 읽기 (빅 엔디안) 이진 float
ifstream inputfile("filepath",ifstream::in|ifstream::binary)
inputfile.read(reinterpret_cast<char*>(&mainvector[0]), n*4);
inputfile.close()
: 나는 데이터를 읽을 다음 사용합니다. 그러나 이것은 엔디안 문제를 다루어야하는 첫 번째 문제이며 이용 가능한 모든 정보가 다소 압도적입니다. 이 과정에서 바이트가 반전된다는 사실을 알게되었습니다 (빅 엔디안 대 리틀 엔디안).
내 바이너리 데이터의 기본 리틀 엔디안 처리를 빅 엔디안으로 변경하거나 원래 데이터를 가져 오기 위해 메인 벡터을 처리하기 위해 통합 할 수있는 라이너가 있습니까? 또는 n 값 각각의 바이트 순서를 수동으로 되돌려 야합니까?
업데이트 :이 경우에는 한 줄짜리 줄이 없어 보입니다. 개별적으로 바이트 순서를 변경하는 방법입니다! 그 방법은 Mats와 다른 곳에서 논의됩니다 (예 : here).
'reinterpret_cast'가 포인터 타입으로 변환 할 수 있다고 생각했습니다 ... – 0x499602D2
@ 0x499602D2 : 방금 편집 한 코드가 -Wall로 gcc 4.6.3으로 컴파일되었습니다.'mainvector'가 사용되지 않았다고 불평하지만 그 외에는 아무런 문제가 없습니다. "big endian float file"이 없으므로 테스트 할 수 없습니다. –
@Mats : Works, incl. 'reinterpret_cast'의 사용법. – umayfindurself