逐字节读取任何文件(不是.bin文件)
Reading any file (not .bin file) byte by byte
我想逐字节(或逐位(读取任何文件(.bin、.txt、.jpg、.zip、.mp3等(,并将其显示在控制台上(以 00100011 这样的格式(。网站上回答了一些问题,但主要是关于.bin文件。我使用哪种文件格式应该无关紧要。例如,当您在文本编辑器中打开.png文件时,您会在屏幕上看到奇怪的字符,例如"∑P®pT™5à*",我认为这些字符是每 8 位文件转换为 ASCII 字母并显示在编辑器上(如果我错了,请纠正我(。
我正在用c ++编写这个程序,到目前为止我尝试过
fstream file("foo.txt", ios_base::binary);
以二进制模式读取文件并获得 8 位块,但这仅适用于.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
。
正在将值分配给"char"数据类型。 您应该始终使用无符号类型("无符号字符"应该足以满足您的情况(,因为二进制文件没有负值,您将能够读取 0-255 而不仅仅是 0-127(文本字符(。 然后,如果您希望它以二进制显示,则可以使用以下命令:
unsigned char c = 251;
char binary[8];
itoa(c, binary, 2);
cout << binary << endl;
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么文件不是由 F 流创建的,或者即使它是输出只是垃圾值?
- C++:实际上不是从二进制文件中读取
- WinVerifyTrust 仅在使用文件而不是内存 blob 时才有效
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 在文件中写入而不是在 c++ 中使用 "<<" 的替代方法?
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- Gnuplot_i.hpp C++接口绘制局部变量而不是文件
- 将 clangd stderr 重定向到文件而不是控制台
- 程序'main.exe'运行失败:指定的可执行文件不是此操作系统平台的有效应用程序
- 逐字节读取任何文件(不是.bin文件)
- 根据boost::filesystem,为什么这个文件不是常规文件
- ui_*文件不是由QT5.5生成的
- 问题包括来自不同目录的头文件[不是路径问题]
- 写入文件-不是在Visual Studio 2015 (fstream)中创建的文件
- 使用 VS2010 构建的可执行文件不是有效的 win32 应用程序;bindump 说它是一个 DLL
- VC C++DLL文件不是在VBA使用的预期文件夹中生成的
- 如何找出哪些包含的文件不是当前VC++解决方案的一部分
- c++ Client Proxy头文件不是由gSoap中的soapcpp2.exe生成的