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

Bor*_*her -2 c++ file dicom visual-studio

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();
}
Run Code Online (Sandbox Code Playgroud)

我使用上面的代码从二进制模式读取DICOM文件到txt文件.

现在如果我使用记事本或任何其他文档查看器打开文本文件,它会显示十六进制编辑器在打开DICOM文件时显示的完全相同的内容.

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

为什么?

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

Bas*_*tch 6

如果您不太清楚使用的文件格式,则无法有意义地处理任何二进制文件的内容.

因此,在您的情况下,您需要研究DICOM规范.看到这个.

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

也许DICOM联盟提供了一些免费软件库来读取这些文件.查看GDCM(或使用常见的解析技术开发您自己的).

阅读有关字节顺序序列化的内容.

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

  • 您当然可以使用C++程序读取数据,但您需要花费时间(可能是数月)来理解文件格式. (2认同)