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

How access the binary data of a file?

本文关键字:二进制 数据 文件 何访问 访问      更新时间:2023-10-16
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 文件时十六进制编辑器显示的内容完全相同。

现在我想操作文本文档内部的数据。所以我尝试将文本文件的内容打印到控制台中,但它打印完全是胡言乱语。

为什么?

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

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

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

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

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

另请阅读有关字节序和序列化的信息。

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