7

is there an easy way to convert an ASCII std::string to HEX? I don't want to convert it to a number, I only want to convert each ASCII character to it's HEX value. The output format should also be a std::string. i.e.: "TEST" would be "0x54 0x45 0x53 0x54" or some similar format.

I found this solution, but maybe there is a better one (without string to int to string conversion):

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 << " ";
}

Thanks,
/mspoerr

0

2 Answers 2

7

If you don't care about the 0x it's easy to do using 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;
}
Sign up to request clarification or add additional context in comments.

5 Comments

I'll post an updated version showing how to add the 0x if you want?
unfortunately this does not work with ASCII chars like 0xFF. I use the string::read() function to read an unsigned char array with ASCII with values > 0x7F. What changes are needed in your solution to get it working in my sceanrio? Thanks again...
@mspoerr: There's no ASCII character with value 0xFF. Can't be, since ASCII is a 7 bit character set. That's also why char might or might not be signed; it really doesn't matter to ASCII. char(0x7F) is always positive.
I mean the 8-Bit version, however it is called (extended ASCII or so).
This does not keep the setw(2) and setfill('0') beyond the first element of the string.
4

This answer to another question does what you want, I think. You'd have to add a " " as separator argument for the ostream_iterator to get whitespaces between the characters.

2 Comments

+1 for not repeating content! Didn't spot that in my quick search.
@awoodland: I simply remembered having answered almost exactly that question before.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.