2017-07-17 41 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文件時十六進制編輯器顯示的內容完全相同的內容。

現在我要處理的文本文檔內的數據。所以我嘗試將文本文件的內容打印到控制檯中,但它會打印完整的亂碼。

爲什麼?

,我應該如何去了解,如果我想訪問和操縱二進制數據?

+0

二進制數據不是文本。它可以包含*文本,但本身不包含文本。因此,您不能使用文本函數來處理數據。 –

+0

@Someprogrammerdude,我知道。我的主要問題是爲什麼我能夠通過記事本閱讀它,但不能通過C++程序以相同的方式閱讀? –

+0

.txt文件專門格式化爲ASCII,二進制文件可以是任何格式。 – iyop45

回答

6

如果您不清楚file format的使用情況,則無法處理任何二進制文件的內容。

所以在你的情況下,你需要研究DICOM規範。見this

當然,您可能需要使用二進制讀取操作,如std::istream::read,std::istream::get等......要明智地使用它們,您需要花費數週時間研究DICOM文件格式。

也許DICOM聯盟提供了一些free software庫來讀取這些文件。看看GDCM(或開發自己的,使用普通parsing技術)。 「

」 「 」

另請參閱關於endiannessserialization

順便說一下,使用面向文本的函數如getline對於二進制文件沒有太大意義(它可以包含空字節和包含10的UTF-8或ASCII-的字節在任何地方)。

+0

我的主要問題是爲什麼我可以從使用記事本的文本文件讀取數據,但不使用C++程序? –

+2

您當然可以使用C++程序讀取數據,但您需要花時間(也許幾個月)瞭解文件格式。 –

+0

所以,記事本解析二進制數據,以使其可讀? –

相關問題