6

バイナリデータ(エンコードなし)で保存された生の画像ファイルがあります。ファイルを読み込んで、値をunsignedcharにキャストしたいと思います。しかし、これをどのように始めればよいのかわかりません。各ファイルには640x480バイトが含まれています。各ピクセルは8ビットです。

ここでC++ヘルプページを使用しました:http : //www.cplusplus.com/doc/tutorial/files/しかし、データを計算しているとき、同じバイナリ/人間が読めない文字を表示しているようです。誰かアドバイスしてもらえますか?これまでの私のコードは次のとおりです。

    #include <iostream>
    #include <fstream>
    using namespace std;

ifstream::pos_type size;
char * memblock;

int main () {
  ifstream file ("imageData.raw", ios::in|ios::binary|ios::ate);
  if (file.is_open())
  {
    size = file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);

    cout << "the complete file content is in memory";

    for (int l=0; l<size; l++){
    cout << " memblock[] is = " << (unsigned char)memblock[l] << " index was l = " << l << endl;
    }

    file.close();


    delete[] memblock;
  }
  else cout << "Unable to open file";
  return 0;
}

出力のサンプルキャプチャを次に示します。

 memblock[] is = ▀ index was l = 2937
 memblock[] is = E index was l = 2938
 memblock[] is = τ index was l = 2939
 memblock[] is = C index was l = 2940
 memblock[] is = ┘ index was l = 2941
 memblock[] is = B index was l = 2942
 memblock[] is = ╬ index was l = 2943
 memblock[] is = D index was l = 2944
 memblock[] is = ┼ index was l = 2945
 memblock[] is = C index was l = 2946
 memblock[] is = ╝ index was l = 2947
 memblock[] is = B index was l = 2948
 memblock[] is = ┤ index was l = 2949
 memblock[] is = B index was l = 2950
 memblock[] is = ¿ index was l = 2951
 memblock[] is = > index was l = 2952
 memblock[] is = í index was l = 2953
 memblock[] is = ; index was l = 2954
 memblock[] is = £ index was l = 2955
 memblock[] is = 6 index was l = 2956
 memblock[] is = á index was l = 2957
 memblock[] is = 4 index was l = 2958
 memblock[] is = Ñ index was l = 2959
 memblock[] is = 7 index was l = 2960
 memblock[] is = ╡ index was l = 2961
4

1 に答える 1

9
unsigned char* memblock; // change declaration of memblock

...

memblock = new unsigned char[size]; // change to unsigned char
file.seekg (0, ios::beg);
file.read ((char*)memblock, size); // cast to a char* to give to file.read

文字の代わりに数値を印刷するには、int印刷前にキャストします。

(int) memblock[l]
于 2012-06-26T19:39:47.157 に答える