我有一个md5十六进制表示(来自用户输入的字符串),我想将其转换为unsigned char[16]
。
我知道我可以将一些十六进制字符串转换为十进制,如下所示:
unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
如何使用类似的方法将小数值作为unsigned char[16]
?我试着像这样:
std::stringstream ss;
ss << std::hex << mdString;
unsigned char hash2[16];
for(int i = 0; i < 16; i++)
ss >> hash2[i];
但是当我使用以下代码测试它时,断言失败
string plain = "foo";
unsigned char digest[16];
MD5((unsigned char*) plain.c_str(), plain.length(), digest);
char digestAsHexString[33];
for(int i = 0; i < 16; i++)
sprintf(&digestAsHexString[i * 2], "%02x", (unsigned int)digest[i]);
std::stringstream ss;
ss << std::hex << digestAsHexString;
unsigned char convertedDigest[16];
for(int i = 0; i < 16; i++)
ss >> convertedDigest[i];
for(int i = 0; i < 16; i++)
assert(digest[i] == convertedDigest[i]);