Преобразование шестнадцатеричной строки в байты в С++

Я ищу библиотечную функцию С++ или встроенную функцию, которая может читать длинную шестнадцатеричную строку (например, хэш SHA256) и превращать ее в массив символов без знака. Я пытался использовать stringstream для этого, но безрезультатно.

Например -

bool StringToHex(std::string inStr, unsigned char *outStr);

Input - inStr = "5a12b43d3121e3018bb12037" //48 bytes

Output- outStr* = {0x5a, 0x12, 0xb4, 0x3d, 0x31, 0x21, 0xe3, 0x01, 0x8b, 0xb1, 0x20, 0x37} //24 bytes

person smanikar    schedule 09.10.2014    source источник
comment
Почему бы не сделать outStr std::ostream & вместо unsigned char *? Затем вы можете передать std::ostringstream, что немного безопаснее, чем использование указателя.   -  person cdhowie    schedule 09.10.2014


Ответы (1)


Выделите достаточно места для outStr перед его вызовом.

bool StringToHex(const std::string &inStr, unsigned char *outStr)
{
    size_t len = inStr.length();
    for (size_t i = 0; i < len; i += 2) {
        sscanf(inStr.c_str() + i, "%2hhx", outStr);
        ++outStr;
    }
    return true;
}
person timrau    schedule 09.10.2014