【发布时间】:2017-10-01 15:06:41
【问题描述】:
我想了解如何在 C++ 中读取二进制文件。 我的代码:
int main() {
ifstream ifd("input.png",ios::binary |ios::ate);
int size = ifd.tellg();
ifd.seekg(0, ios::beg);
vector<char> buffer;
buffer.reserve(size);
ifd.read(buffer.data(), size);
cout << buffer.data();
return 0;
}
我认为如果我计算缓冲区,我会得到二进制的结果,但事实并非如此。
My output is: ˙Ř˙á6Exif
如果我阅读文本文件,它会以正常形式而不是二进制形式显示文本。显然我的逻辑不在这里。 如何将文件读取到缓冲区以使其包含二进制值? 附:我这样做是为了实现 Shannon-Fano 算法,所以如果有人对读取二进制文件有任何建议,我将不胜感激。
【问题讨论】:
-
您的控制台不会打印二进制文件,它会尝试理解二进制数据,就好像它是文本 + 一些控制代码一样
-
您打开了一个图片文件
image.png,其中(大概)包含二进制编码的图像数据(也就是一组红/绿/蓝强度级别或类似的东西)。 -
@MarkoMlakar 是的,数据是二进制的。如果它是二进制或文本,在 C++ 中真的没有区别。通过使用
ios::binary打开文件,您可以确保不会发生文本转换。 -
听起来你误解了这里的“二进制”是什么意思。您的 [破碎] 假设/期望的一个示例将使我们能够更好地调整我们的答案。