2017-07-17 6 views
-2
ifstream fp; 
fp.open(path, ios::in | ios::binary); //path is the path of the DICOM file I want to read 

fstream output; 

output.open("C:\\Users\\Z00\\dump.txt", ios::in | ios::out | ios::trunc | ios::binary); 

if (fp.is_open()) 
{ 
    while (getline(fp, rbuffer)) 
     output << rbuffer; 

    fp.close(); 
} 

DICOMファイルからバイナリモードでtxtファイルに読み込むために上記のコードを使用しました。ファイルのバイナリデータへのアクセス方法は?

今すぐメモ帳などのドキュメントビューアを使用してテキストファイルを開くと、DICOMファイルを開くと16進エディタに表示される内容とまったく同じ内容が表示されます。

ここで、テキスト文書の内部のデータを操作したいと思います。だから私は、コンソールにテキストファイルの内容を印刷しようとしましたが、完全なばかげた印字をします。

なぜですか?

バイナリデータにアクセスして操作するにはどうすればよいですか?

+0

バイナリデータはテキストではありません。それは*テキストを含むことができますが、テキスト自体ではありません。そのため、テキスト機能を使用してデータを処理することはできません。 –

+0

@Someprogrammerdude、私はそれを知っています。私の主な質問は、なぜ私はメモ帳で読むことができるのですか?同じ方法でC++プログラムで読むことができないのですか? –

+0

.txtファイルの形式はASCII形式ですが、バイナリファイル形式は任意です。 – iyop45

答えて

6

file formatがよくわからない場合は、バイナリファイルの内容を意味のある方法で処理することはできません。

あなたのケースでは、DICOMの仕様を検討する必要があります。 thisを参照してください。 ,std::istream::getなどのバイナリ読み取り操作を使用する必要があります。これらを賢明に使用するには、DICOMファイル形式の検討に数週間を費やす必要があります。

多分、DICOMコンソーシアムは、そのようなファイルを読むためにいくつかのfree softwareライブラリを提供しています。 GDCMを見てください(または、共通のparsingテクニックを使用して自分で開発してください)。

endiannessおよびserializationもご覧ください。

getlineのようなテキスト指向の機能を使用すると、バイナリファイル(UTF-8またはASCIIのいずれかの場所で-i.e. \nを含むヌルバイトとバイトを含むことができます)ではあまり意味がありません。

+0

私の主な質問は、なぜノートパッドを使ってテキスト文書からデータを読むことができるのですが、C++プログラムを使用しないのですか? –

+2

あなたは確かにC++プログラムを使用してデータを読むことができますが、ファイルフォーマットを理解するのに時間(おそらく数ヶ月)を費やす必要があります。 –

+0

したがって、メモ帳はバイナリデータを読みやすくするために解析していますか? –

関連する問題