У меня есть программа, которая берет содержимое файла и преобразует его в шестнадцатеричный формат. Я хотел бы взять эти шестнадцатеричные значения и сохранить их как элементы массива unsigned char
, который я назвал hexData. Как бы я это сделал?
Я пытался преобразовать шестнадцатеричные данные в string literal
(например, 0x5A
) и преобразовать их в char*
, но когда я пытаюсь запустить код, ничего не происходит (нет вывода, нет ошибок). Это также кажется очень неэффективным способом сделать это. Я оставил код, чтобы понять, что я имею в виду.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
typedef unsigned char BYTE;
typedef unsigned short int WORD;
int main()
{
ifstream ifd("C:\\Users\\Shayon Shakoorzadeh\\Documents\\test.txt", ios::binary | ios::ate);
int size = ifd.tellg();
ifd.seekg(0, ios::beg);
vector<char> buffer;
buffer.resize(size);
ifd.read(buffer.data(), size);
static BYTE hexData[100000] =
{
};
string tempStr;
char *tempChar;
const int N = 16;
const char hex[] = "0123456789ABCDEF";
char buf[N*4+5+2];
for (int i = 0; i < buffer.size(); ++i)
{
int n = i % N;
// little endian format
if (i > 0 && i < buffer.size()-1)
swap(buffer[i], buffer[i+1]);
// checks to see if at the end
if (n == 0)
{
memset(buf, 0x20, sizeof(buf));
buf[sizeof(buf) - 3] = '\n';
buf[sizeof(buf) - 1] = '\0';
}
unsigned char c = (unsigned char)buffer[i];
// storing the hex values
buf[n*3+0] = hex[c / 16];
buf[n*3+1] = hex[c % 16];
//encoded buffer
buf[3*N+5+n] = (c>=' ' && c<='~') ? c : '.';
//my attempt
tempStr = "0x" + string(1, hex[c / 16]) + string(1, hex[c % 16]);
tempChar = (char*)alloca(tempStr.size() + 1);
memcpy(tempChar, tempStr.c_str(), tempStr.size() + 1);
strcpy( (char*) hexData[i] , tempChar);
}
}
Статический массив BYTE hexData[] должен иметь следующие значения:
{0x5A, 0x00, 0x7F, 0x90, 0x8A,...}
и так далее
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ:
Позвольте мне уточнить, у меня возникли проблемы с СОХРАНЕНИЕМ этих значений в моем массиве под названием «hexData». Я уже получаю шестнадцатеричные значения из своего файла, но только в виде строки. Я хочу преобразовать эти строки в символы без знака, чтобы их можно было поместить в мой массив hexData. Извините, мой первоначальный вопрос был сформулирован так плохо, но я не верю, что указанный на дубликат вопрос отвечает на мой вопрос.
std::hex
манипулятор, чтобы узнать, как легко напечатать число в шестнадцатеричном формате. - person user4581301   schedule 24.07.2018