【发布时间】:2020-11-24 15:29:03
【问题描述】:
我正在尝试实现将从文件中读取的二进制内容连续转换为字节。
我的文件samplefile.bin 包含 16bytes ,这是二进制的形式。在Hexed.it 中会这样显示。
在这种情况下,我需要以十六进制格式提取这些二进制值并将其存储到char *
我将在这里发布我的示例代码。
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
using namespace std;
int main()
{
uint8_t *ptr;
long size;
ifstream file ("samplefile.bin", ios::in|ios::binary|ios::ate);
size = file.tellg();
std::vector<uint8_t> memblock(size);
file.seekg (0, ios::beg);
file.read(reinterpret_cast<char*>(&memblock[0]), size);
file.close();
ptr = new uint8_t[size];
int z=0;
for(int i=0; i < memblock.size(); i++)
{
std::cout << memblock.at(i) << ' ';
z=memblock.at(i)&0xff;
ptr[i] = z;
}
cout<<"Output"<<endl;
for (int i=0;i<memblock.size();i++)
{
cout<<ptr[i];
}
delete []ptr;
return 0;
}
我希望将ptr 传递给其他函数。但是这个 print cout<<ptr[i]<<endl; 的输出如下所示,这意味着转换没有发生。
╠ ↕ ‼ ¶ ╙ O N ╥ í * : J Z [ \ J
我想要类似下面的东西
ptr[0] = 0xCC
ptr[1] = 0x12
...
ptr[15] = 0x4A
当我给出这样的 cout<<(int)ptr[i]<<endl; 时,我得到 0xCC 的十进制值作为 204 和其他打印相同的东西。
我已经提到了C++ read binary file and convert to hex 和Convert binary file to hex notation。我没有找到确切的解决方案,因为在这两个链接中他们将其转换为字符串。我的意图不是这个。
我提到了这个How properly to read data from binary file to char array,它看起来和我的很相似。但这并没有解决我的问题。
我希望这个 0xCC 作为单个字节,这应该存储到 ptr[0] 和其他值类似
如何解决这个问题?我在这里错过了什么吗?我是 C++ 新手,请帮我解决这个问题
感谢您的努力。
【问题讨论】:
-
cout << "ptr[" << std::dec << i << "]: " << std::hex << (int)ptr[i] << '\n';
标签: c++ file hex binary-data char-pointer