将十六进制 charArray 转换为 String

Loh*_*avi 1 c c++

我有一个严重而恼人的问题,请帮忙

mdContext->digest[i] 是一个具有十六进制值的无符号字符数组,所以

for (i = 0; i < 16; i++)
    printf ("%02x", mdContext->digest[i]); 
Run Code Online (Sandbox Code Playgroud)

印刷 900150983cd24fb0d6963f7d28e17f72

现在......我想在一个字符数组中获取这个值,即如果我这样做

printf("%s",ArrayConverted);
Run Code Online (Sandbox Code Playgroud)

我想打印上面的字符串...请帮我做这个

我尝试过的事情

试验 1

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);
Run Code Online (Sandbox Code Playgroud)

这打印 90593d4bd9372e77 但原始内容是900150983cd24fb0d6963f7d28e17f72

所以它在中间跳过了许多字符......请帮我将此十六进制字符数组转换为字符串

Eri*_*rik 5

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]);
Run Code Online (Sandbox Code Playgroud)

每个字节需要两个十六进制数字-所以调整开始位置sprintf2*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;
Run Code Online (Sandbox Code Playgroud)