Преобразование ASCII std:: string в hex

есть ли простой способ преобразовать ASCII std:: string в HEX? Я не хочу преобразовывать его в число, я только хочу преобразовать каждый символ ASCII в его шестнадцатеричное значение. Выходной формат также должен быть строкой std::. т. е.: "тест" будет "0x54 0x45 0x53 0x54" или какой-то аналогичный формат.

Я нашел это решение, но, возможно, есть лучшее (без преобразования string to int в string):

std::string teststring = "TEST";
std::stringstream hValStr;
for (std::size_t i=0; i < teststring.length(); i++)
{
    int hValInt = (char)teststring[i];
    hValStr << "0x" << std::hex << hValInt << " ";
}

спасибо,
/ mspoerr

2 ответов


Если вы не заботитесь о 0x, это легко сделать с помощью std::copy:

#include <algorithm>
#include <sstream>
#include <iostream>
#include <iterator>
#include <iomanip>

namespace {
   const std::string test="hello world";
}

int main() {
   std::ostringstream result;
   result << std::setw(2) << std::setfill('0') << std::hex << std::uppercase;
   std::copy(test.begin(), test.end(), std::ostream_iterator<unsigned int>(result, " "));
   std::cout << test << ":" << result.str() << std::endl;
}

ответ другой вопрос, что вы хотите, я думаю. Вы должны добавить " " в качестве аргумента разделителя для ostream_iterator получить пробелы между символами.