3

複数の jpeg のデータを含むファイルを (一部のガベージと共に) 取得しました。このファイルからバイナリを抽出し、ガベージを除外して jpeg を作成する必要があります。jpeg の開始バイナリ シーケンスを知っています。

char buffer[30];
ifstream fin;
fin.open ("FILENAME.raw", ios::in | ios::binary);
while (!fin.eof())
{
    fin.read(buffer,30);
    cout<<buffer[2]<<endl;
}
fin.close();

ここでは、ファイルをバイナリで印刷しようとしていますが、このコードを実行すると、エイリアンの文字が画面に印刷されます。

4

2 に答える 2

2

ここでの問題は、バイナリ情報を文字に変換していた「cout << buffer[2]」だったと思います。前に int キャストを試してください。また、バイナリデータは符号なしである可能性があるため、静的な「符号なし文字配列」を使用する必要があります。それは機能します:

unsigned char buffer[ 30 ];
ifstream fin;
fin.open ("FILENAME.raw", ios::in | ios::binary);
while (!fin.eof())
{

    fin.read( (char*)( &buffer[0] ), 30 ) ;
    cout << (int)buffer[2] << " ";
}
fin.close();
return 0;

また、バイナリをトラバースしたい場合は、なぜ buffer[2] を出力するだけなのか。

于 2012-10-23T08:58:41.850 に答える
1

コードは完全に問題ないように見えるため、ファイルのバイナリ コンテンツを再確認する必要があります。

于 2012-10-23T08:37:46.987 に答える