如何访问文件的二进制数据?

时间:2017-07-17 10:27:57

标签: c++ visual-studio file dicom

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文件时显示的完全相同的内容。

现在我想操纵文本文档中的数据。所以我尝试将文本文件的内容打印到控制台中,但它打印出完整的乱码。

为什么?

如果我想访问和操作二进制数据,我应该怎么做?

1 个答案:

答案 0 :(得分:6)

如果您不熟悉所使用的file format,则无法有意义地处理任何二进制文件的内容。

因此,在您的情况下,您需要研究DICOM规范。请参阅this

当然,您可能需要使用二进制读取操作,例如std::istream::readstd::istream::get等...要明智地使用它们,您需要花费数周时间研究DICOM文件格式。

也许DICOM联盟提供了一些free software库来读取这些文件。查看GDCM(或使用常见的parsing技术开发您自己的技术)。

另请阅读endiannessserialization

BTW,使用像getline这样的面向文本的函数对二进制文件没有多大意义(二进制文件可以包含空字节和包含10 -ie \n的UTF-8或ASCII-在任何地方的字节)