2016-06-13 12 views
1

私はC++で一般的なので、C++のファイル処理でも新しくなっています。C++での.rawファイルの読み込み

16-bit integersのファイルを読み、寸法が512 x 512である必要があります。そのために

私は、次のコードを使用しています:私はiのために取得していた値が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; 

を。だから私は何かが正しくないと思う。

誰かがこの点で私を助けてくれますか?

+2

どのような価値がありますか? 'ls -l myData.raw'とは何ですか? –

+2

あなたの 'myData.raw'はサイズ524288(512 * 512 * 2)であると予想されますが、あなたのファイルはこのサイズではないと思われます... – Mine

+0

(512 * 512 * 2 * 2)短いintが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; 
} 
関連する問題