2016-06-13 2 views
1

저는 C++에서 일반적으로 새롭고 C++에서의 파일 처리에도 관련이 있습니다.C++에서 .raw 파일 읽기

16-bit integers이 있고 512 x 512 인 파일을 읽어야합니다. 나는 다음 코드를 사용하고이를 위해

:

ifstream myData("myData.raw"); 
short value;            
int i = 0; 
char buf[sizeof(short)]; 
while (myData.read(buf,sizeof(buf))) 
{ 
    memcpy(&value, buf, sizeof(value)); 
    cout << value << " "; 
    i++; 
} 

cout << endl << "Total count: " << i << endl; 

내가 i 위해 점점 오전 값은 512 x 512 없습니다. 그래서 나는 뭔가 옳지 않다고 생각합니다.

누군가 나를 도와 줄 수 있습니까?

+2

받고있는 값은 무엇입니까? 'ls -l myData.raw' 란 무엇입니까? –

+2

myData.raw는 크기가 524288 (512 * 512 * 2) 일 것으로 예상되지만 파일 크기가이 크기가 아닌 것으로 의심됩니다 ... – Mine

+0

(512 * 512 * 2 * 2) 짧은 정수는 16 비트라고 가정합니다. – doug

답변

1

기본 열기 모드는 "텍스트"이며 일부 문자는 파일 끝으로 삭제되거나 처리됩니다. ios :: binary는 이러한 변경을 중지시킵니다.

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() { 
    ifstream myData("myData.raw", ios::binary); 
    short value; 
    int i = 0; 
    char buf[sizeof(short)]; 
    while (myData.read(buf, sizeof(buf))) 
    { 
     memcpy(&value, buf, sizeof(value)); 
     cout << value << " "; 
     i++; 
    } 

    cout << endl << "Total count: " << i << endl; 
}