C ++将md5十六进制字符串转换为unsigned char [16]

时间:2016-03-06 10:59:21

标签: c++ string hex md5

我有一个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]);

0 个答案:

没有答案