#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iomanip>
void test1(const std::string &test)
{
size_t numbytes = test.size() / 2;
std::vector<unsigned char> bytearray;
bytearray.reserve(numbytes);
for (size_t w = 0, x = 0; w < numbytes; ++w, x += 2) {
unsigned char b;
char c = test[x];
if ((c >= '0') && (c <= '9'))
b = (c - '0');
else if ((c >= 'A') && (c <= 'F'))
b = 10 + (c - 'A');
else if ((c >= 'a') && (c <= 'f'))
b = 10 + (c - 'a');
else {
// error!
break;
}
b <<= 4;
c = test[x+1];
if ((c >= '0') && (c <= '9'))
b |= (c - '0');
else if ((c >= 'A') && (c <= 'F'))
b |= 10 + (c - 'A');
else if ((c >= 'a') && (c <= 'f'))
b |= 10 + (c - 'a');
else {
// error!
break;
}
bytearray.push_back(b);
}
std::cout << "1: ";
for(auto b : bytearray)
std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)b << " ";
std::cout << std::endl;
}
void test2(const std::string &test)
{
size_t numbytes = test.size() / 2;
std::vector<unsigned char> bytearray;
bytearray.reserve(numbytes);
for(size_t w = 0, x = 0; w < numbytes; ++w, x += 2)
{
std::istringstream iss(test.substr(x, 2));
unsigned short b;
if (!(iss >> std::hex >> b)) {
// error!
break;
}
bytearray.push_back(static_cast<unsigned char>(b));
}
std::cout << "2: ";
for(auto b : bytearray)
std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)b << " ";
std::cout << std::endl;
}
int main()
{
std::string test = "48656c6c6f20576f726c64";
std::cout << test << std::endl;
test1(test);
test2(test);
return 0;
}