我想逐字节(或逐位)读取任何文件(.bin、.txt、.jpg、.zip、.mp3等)并将其显示在控制台上(格式如 00100011)。网站上回答了一些问题,但主要是关于 .bin 文件。我使用哪种文件格式应该无关紧要。例如,当您在文本编辑器中打开一个 .png 文件时,您会在屏幕上看到奇怪的字符,如“∑P®pT™5à*”,我推测这些是文件的每 8 位转换为 ASCII 字母并显示在小编(如有错误请指正)
我正在用 C++ 编写这个程序,到目前为止我已经尝试过
fstream 文件("foo.txt", ios_base::binary);
以二进制模式读取文件并获取 8 位 block ,但这仅适用于 .txt 文件,它只是像通常那样显示文本文件中的字符。然而,甚至无法打开其他文件格式,如 .png。
我能得到一些关于如何实现这一点的提示吗,如果我提供了任何错误的信息,请纠正我。
最佳答案
问题是一个字节中只有一部分值是可打印的。例如,值 0x03 不可打印,但 0x42 是。
我建议您转换来自 uint8_t
的变量至 unsigned int
打印前。类似于 cout << hex << (unsigned int)(value) << endl;
此外,不要使用 char
, signed char
或 unsigned char
读取二进制文件时。使用 uint8_t
, uint16_t
或 uint32_t
.
关于c++ - 逐字节读取任何文件(不是 .bin 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35167174/