Ad

How To Convert A String Into A Hexadecimal And Store That Hexadecimal Value Into A String In C++

- 1 answer

I want to store the hex values into a string, but I don't know to do that when my string is not giving me the hex values when it is printed out. I'm pretty sure it has something to do with hex, but I don't know how to get those int values that print out the correct hex values to be stored into a string without it being changed.

I tried different ways of manipulating this and searched on the web but have not found much of a solution in solving this.

#include <iostream>
#include <string>
#include <sstream>
#include <iterator>
#include <iomanip>
#include <vector>
#include <stdlib.h>

using std::cout;
using std::endl;
using std::string;
using std::hex;
using std::stringstream;

using namespace std;

int main(){
        string s2 = "HelloWorld";

        cout << "string: " << s2 << endl;
        cout << "hexval: ";
        vector<int> character; // converting each character to its ascii value
        string bytes;
        for(int i = 0; i < s2.size(); i++) {
            character.push_back(int(s2[i]));
            bytes = to_string(character.at(i));
            cout << hex << character.at(i) << " ";
            cout << bytes << endl;
        }
        cout << endl;
        cout << bytes << endl;
        
    return 0;
}

Here is the output that 'bytes' my string is printing out:

48 72
65 101
6c 108
6c 108
6f 111
57 87
6f 111
72 114
6c 108
64 100

Left is the hexadecimals and right is the string. Two different values. How can I store these hexadecimals that is being converted from a string be stored into a string as a hexadecimal value?

Ad

Answer

I see 2 different ways:

The first one uses a char array and writes to it with sprintf with %X.

The second way uses a stringstream and streams the int values into it with the hex specifier. You can get the string with the .str() method of stringstream.

#include <iostream>
#include <string>
#include <sstream>
#include <iterator>
#include <iomanip>
#include <vector>
#include <stdlib.h>

using std::cout;
using std::endl;
using std::string;
using std::hex;
using std::stringstream;

using namespace std;

int main(){
    string s2 = "HelloWorld";

    cout << "string: " << s2 << endl;
    string result;
    for(int i = 0; i < s2.size(); i++) {
        char buffer[20];
        sprintf(buffer, "%X ", s2[i]);
        result += buffer;
    }
    cout << "hexval1: " << result << endl;

    stringstream res;
    for (int val : s2)
        res << hex << val << " ";

    cout << "hexval2: " << res.str() << endl;

    return 0;
}
Ad
source: stackoverflow.com
Ad