2016-08-25 9 views
1

以下のC++プログラムでバイナリデータを読み込もうとしています。しかし、値を表示することはできません。 The dataは8bit unsigned charとして保存されます。それを解決する方法を教えてください。C++でバイナリデータを読み取る

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

int main(int argc,char *argv[]) 
{ 
    if(argc!=2) 
    { 
     cout << "argument error" << endl; 
     return 1; 
    } 

    ifstream file (argv[1], ios::in|ios::binary); 
    //ifstream fin(outfile, ios::in | ios::binary); 

    if (!file) 
    { 
     cout << "Can not open file"; 
     return 1; 
    } 

    unsigned char d; 

    while(!file.eof()) 
    { 
     file.read((char *) &d, sizeof(unsigned char)); 

     cout << d << endl; 
    } 

    file.close(); 

    return 0; 
} 

答えて

6

まずはdon't do while (!file.eof())

問題の場合:という文字を出力しています。つまり、ストリームはそれを文字として印刷しようとしますが、バイナリデータには正しくありません。

読み取った値を印刷する場合は、整数に変換する必要があります。何かのように

std::cout << std::hex << std::setw(2) << std::setfill('0') << 
      << static_cast<unsigned int>(d); 

上記の値を2桁の16進数で表示する必要があります。重要なビットはstatic_castです。

+0

あなたが言ったように、値は固定プログラムによって0と1を示すことができます。私は0と255を8ビットで表示したいと思います。私にそれをする方法を教えてください。 – LenItsuki

+0

@LenItsuki何を意味するのかよくわかりません...入力ファイル内の各* byte *は1つだけ '1'または '0'であることを意味しますか?入力ファイルの部分的な16進ダンプを含めるように質問を編集できますか(いいえ、リンク先のような未知のファイルをダウンロードして開くことはありません)。 –

+0

私はファイルに含まれている値を誤っています。 0と1はOKです!ご指摘ありがとうございます。 – LenItsuki

関連する問題