我有一个严重且烦人的问题,请帮忙
mdContext->digest[i]
是一个带有十六进制值的无符号字符数组,所以
for (i = 0; i < 16; i++)
printf ("%02x", mdContext->digest[i]);
打印900150983cd24fb0d6963f7d28e17f72
现在....我想在char数组中得到这个值,即如果我这样做
printf("%s",ArrayConverted);
我想打印上面的字符串......请帮我这样做
我尝试过的事情
unsigned char in[64]=0;
int tempValue[64];
for (i = 0; i < 16; i++){
sprintf(&tempValue[i],"%02x", (unsigned char)mdContext->digest[i]);
in[i]=(unsigned char)tempValue[i];
}
printf("%s\n\n\n",in);
这打印
90593d4bd9372e77
但原始内容为900150983cd24fb0d6963f7d28e17f72
所以它在中间跳过很多字符...请帮我把这个十六进制的Char数组转换成字符串
答案 0 :(得分:4)
char tempValue[33]; // 32 hex digits + 0-terminator
int i;
for (i = 0; i < 16; ++i)
sprintf(tempValue + 2*i, "%02x", (unsigned char)mdContext->digest[i]);
每个字节需要两个十六进制数字 - 因此使用sprintf
调整2*i
的起始位置
tempValue + 2*i
与&tempValue[2*i]
编辑:正确的c ++版本。
std::stringstream s;
for (int i = 0; i < 16; ++i)
s << std::hex << std::setfill('0') << std::setw(2) << (unsigned short) mdContext->digest[i];
std::cout << s.str() << std::endl;
答案 1 :(得分:1)
C ++特定解决方案:
#include <sstream>
#include <iomanip>
std::stringstream s;
s.fill('0');
for ( size_t i = 0 ; i < 16 ; ++i )
s << std::setw(2) << std::hex <<(unsigned short)mdContext->digest[i]);
std::cout << s.str() << endl;