Я пытаюсь добиться непрерывного преобразования двоичного содержимого, считываемого из файла, в байт. Мой файл samplefile.bin
содержит 16 байт и имеет форму двоичного файла . В 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
передавалось какой-то другой функции. Но вывод этого вывода 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++ чтении двоичного файла и преобразовании в шестнадцатеричный и Преобразование двоичного файла в шестнадцатеричное представление. Я не нашел точного решения, потому что в этих двух ссылках они преобразуют его в строку. Мое намерение не в этом.
Я ссылался на это Как правильно читать данные из бинарного файла в массив символов, который похож на мой. Но это не решило мою проблему.
Я хочу, чтобы это 0xCC
было одним байтом, и это должно быть сохранено в ptr[0]
и аналогично для других значений
Как обойти эту проблему? Я что-то упустил здесь? Я новичок в C++, помогите решить эту проблему.
Оценивая усилия.