c++ - 逐字节读取任何文件(不是 .bin 文件)

标签 c++ byte ascii readfile

我想逐字节(或逐位)读取任何文件(.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 charunsigned char读取二进制文件时。使用 uint8_t , uint16_tuint32_t .

关于c++ - 逐字节读取任何文件(不是 .bin 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35167174/

相关文章:

c++ - 如何在 macOS 中使用 CMake 让库找到 Eigen?

c++ - 为什么用结构体初始化数组需要指定结构体名称

c++ - 加载巨大 XML 文件时的内存管理

java - ByteArrayInputStream#read() 负输入字节的奇怪行为

python - 写入文件字节和字符串

将二进制转换为对应的 ASCII 字符

html - 可嵌入的 HTML/CSS/脚本引擎 C++

python - 为 ASCII 数据添加名称和分配数据类型

c - C 中的多字节整数变量

java - 在消息到达时显示消息,而不是在 session 结束时显示所有消息