将十六进制charArray转换为String

时间:2011-03-12 20:46:03

标签: c++ c

我有一个严重且烦人的问题,请帮忙

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

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

打印900150983cd24fb0d6963f7d28e17f72

现在....我想在char数组中得到这个值,即如果我这样做

printf("%s",ArrayConverted);

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

我尝试过的事情

试验-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);

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

所以它在中间跳过很多字符...请帮我把这个十六进制的Char数组转换成字符串

2 个答案:

答案 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;

小型演示:http://ideone.com/sTiEn