Преобразовать строковую переменную из двух символов в шестнадцатеричный

У меня есть код, где пользователь вводит два символа в string переменная. У меня есть функция, которая проверяет, что пользовательский ввод имеет длину только два символа и содержит только допустимые шестнадцатеричные цифры.

Я хочу записать эти цифры в двоичный файл длиной 32 байта. Я старался:

    outFile.write((char*)&string[0], 1);

В цикле, который выполняется 32 раза (я хочу записать один байт за раз) для тестирования, но он просто записывает код ascii для char, а не сам фактический char. Я ожидал, что он напишет nybble и пропустит nybble, но вместо этого он записал полный байт информации ascii. Итак, я попробовал:

    outFile.write((unsigned char*)&string[0], 1);

Но мой компилятор жалуется на то, что он неверный.

Я хочу решить эту проблему без преобразования строки в строку в стиле c. Другими словами, я хочу string содержать два символа и представлять один байт информации. Не четыре (плюс нулевые символы).

0

Решение

У вас есть строка, которая представляет целое число. Так что преобразуйте строку в целое число:

unsigned char byte = (unsigned char)std::stoi(string, 0, 16);
outFile:write(static_cast<const char*>(&byte), 1);
1

Другие решения

В качестве обходного пути для ваших недостающих стои вы можете сделать это:

#include <iostream>
#include <sstream>
#include <ios>

char hexnum[]{"2F"}; // or whatever, upper or lowercase hex digits allowed.
std::istringstream input(hexnum);
int num=0;
input >> std::hex >> num;
unsigned char byte = num;
outFile.write(static_cast<const char*>(&byte), 1);
0

По вопросам рекламы [email protected]