我有这个代码正确显示我,一个字符串的md5.我更喜欢将一个字符串返回给函数,但是在将md5的值转换为我的字符串时遇到了一些问题.这是代码:
string calculatemd5(string msg)
{
string result;
const char* test = msg.c_str();
int i;
MD5_CTX md5;
MD5_Init (&md5);
MD5_Update (&md5, (const unsigned char *) test, msg.length());
unsigned char buffer_md5[16];
MD5_Final ( buffer_md5, &md5);
printf("Input: %s", test);
printf("\nMD5: ");
for (i=0;i<16;i++){
printf ("%02x", buffer_md5[i]);
result[i]=buffer_md5[i];
}
std::cout <<"\nResult:"<< result[i]<<endl;
return result;
}
Run Code Online (Sandbox Code Playgroud)
比如result[i]像这样一个奇怪的ascii char:.
怎么可能解决这个问题呢?
更清洁的方式(更快)可能是这样的:
std::string result;
result.reserve(32); // C++11 only, otherwise ignore
for (std::size_t i = 0; i != 16; ++i)
{
result += "0123456789ABCDEF"[hash[i] / 16];
result += "0123456789ABCDEF"[hash[i] % 16];
}
return result;
Run Code Online (Sandbox Code Playgroud)
更换
for (i=0;i<16;i++){
printf ("%02x", buffer_md5[i]);
result[i]=buffer_md5[i];
}
Run Code Online (Sandbox Code Playgroud)
同
char buf[32];
for (i=0;i<16;i++){
sprintf(buf, "%02x", buffer_md5[i]);
result.append( buf );
}
Run Code Online (Sandbox Code Playgroud)
请注意,当您打印出结果时,打印result,而不是result[i]获得整个字符串.
如果你将buffer_md5[i]值直接放在结果中,那么你可能会遇到问题,因为字符串可能没有嵌入0(如果有的话).