c++ - 从文件读取后显示缓冲区中的十六进制代码
问题描述
我正在尝试将从文件中读取的十六进制代码存储到缓冲区中,然后将其显示在控制台上,到目前为止它似乎不起作用。这是我的代码:
using namespace std;
int main()
{
ifstream file("Fishie.ch8",ios::binary);
if (!file.is_open())
{
cout << "Error";
}
else
{
file.seekg(0, ios::end);
streamoff size = file.tellg();
file.seekg(0, ios::beg);
char *buffer = new char[size];
file.read(buffer, size);
file.close();
for (int i = 0; i < size; i++)
{
cout <<hex<< buffer[i] << " ";
}
}
delete[] buffer;
cin.get();
}
预期的输出应该是这样的:
00 e0 a2 20 62 08 60 f8 70 08 61 10 40 20 12 0e
d1 08 f2 1e 71 08 41 30 12 08 12 10 00 00 00 00
00 00 00 00 00 18 3c 3c 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
3e 3f 3f 3b 39 38 38 38 00 00 80 c1 e7 ff 7e 3c
00 1f ff f9 c0 80 03 03 00 80 e0 f0 78 38 1c 1c
38 38 39 3b 3f 3f 3e 3c 78 fc fe cf 87 03 01 00
00 00 00 00 80 e3 ff 7f 1c 38 38 70 f0 e0 c0 00
3c 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
解决方案
当您缓冲时,char
所有元素都将打印为字符。您想要的是转换为十六进制的数字。
顺便说一句:当您想要转换为十六进制输出时,如果您真的想char
从文件或unsigned char
.
如您所见,您必须在转换为之前和之后转换为喜欢的istream.read
用途的签名:char
unsigned char
unsigned int
cout <<hex<< (unsigned int)(unsigned char) buffer[i] << " ";
对于真正的 c++ 用户,你应该写一个很好的static_cast
;)
这将打印出十六进制值。但是如果你有一个CR
你会看到一个'a'而不是'0a',所以你必须设置你的宽度并在之前填充字符:
cout.width(2);
cout.fill('0');
for (int i = 0; i < size; i++)
{
cout <<hex<< (unsigned int)(unsigned char)buffer[i] << " ";
}
顺便说一句:delete[] buffer;
在错误的范围内,必须在定义的范围内转移。
推荐阅读
- python - 创建包含月份日期的列表
- c# - Azure DevOps Pipeline 构建失败,因为它可以创建文件夹来写入 XML 文档文件
- python - Python 64位版本上的Tensorflow无法正常工作
- java - Java中是否有任何函数可以以三位数字检索一年中的哪一天?
- ibm-watson - IBM Watson Assistant - 使用第二个 Intent
- c++ - 动态库C++基础实践
- python - 在数据框列中从零到零之前的所有条目
- python - CVXPY 和 CBC 的供应链优化问题
- python - 将 x 轴格式化为 %,将 y 轴格式化为 £
- python - 熊猫。删除单元格并将其他人排成一行的好方法?