2014-10-09 449 views
-1

我正在尋找一個C++庫函數或內置函數,它可以讀取長十六進制字符串(例如SHA256哈希)並將其轉換爲無符號字符數組。我嘗試使用stringstream這個,但無濟於事。將十六進制字符串轉換爲C++中的字節

例如 -

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 
+0

爲什麼不讓'outStr'成爲'std :: ostream&'而不是'unsigned char *'?然後你可以傳入一個'std :: ostringstream',比使用指針更安全一些。 – cdhowie 2014-10-09 04:20:27

回答

0

調用之前分配足夠的空間用於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; 
} 
相關問題