2014-04-27 3 views
1

네트워크 바이트 순서 형식으로 C++ 파일을 읽으려고합니다.C++ 네트워크 바이트 순서로 파일 읽기

지금까지 내가 함께 노력 (단지 첫 번째 정수 (2 바이트) 읽는) :

ifstream in ("input.dat", ios::in|ios::binary); 
unsigned short x; 
in >> x; 

내가 온라인으로 볼 다른 솔루션을. 아무 것도 작동하지 않는 것 같습니다. 이진 데이터로이 소리내어하는 경우 사전에 Thak

,

+2

'ntohs()'와'ntohl()'함수를 확인하십시오. –

답변

3

in >> x 거의 의미가 있습니다. operator >>의 형식으로 추출입니다. 당신은 가능성이 std::istream::read() 방법을 사용하여이 같은 ntohs()

뭔가 함께 다음되어야한다

#include <cstdint> 
#include <netinet/in.h> 

ifstream in ("input.dat", ios::in|ios::binary); 
uint16_t x; 

if (in.read(reinterpret_cast<char*>(&x), sizeof(x))) 
{ 
    x = ntohs(x); 

    // use x here 
} 

... 파일을 가정하는 것은 원시 이진입니다. 또한 유형 변경에 유의하십시오. 이 항목은 모든 플랫폼 독립성을 위해 16 비트 너비가 더 읽기 좋고 작성자는이를 잘 알고 있어야합니다.

+0

안녕하세요, char에 해당하는 것은 무엇입니까? 감사합니다 !!! – magodiez

+0

@magodiez 당신은 동등한 비트 유형을 의미합니까? 나는. 'int8_t' 또는'uint8_t'? 'ntohs '와 같은 기능이 무엇인지 의미한다면 아무 것도 없습니다. 이러한 함수는 엔디안 독립성 문제를 해결하고 단일 바이트 값은 적용되지 않습니다. – WhozCraig

관련 문제