我想了解在 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
如果我阅读文本文件,它会以正常形式而不是二进制形式显示文本。显然我的逻辑不在这里。如何将文件读取到缓冲区以使其包含二进制值? Ps 我这样做是为了实现香农-法诺算法,所以如果有人对阅读二进制文件有任何建议,我将不胜感激。
原文由 mrNobody 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要调整矢量的大小,而不是保留它:
否则,您的代码会尝试将
size
字符读入空缓冲区。您也可以使用设置向量大小的向量构造函数:vector<char> buffer(size);
您可以通过这种方式输出缓冲区的字节值:
或者像常见的十六进制编辑器对十六进制输出所做的那样:
用“Hello World!”缓冲数据将按如下方式打印: