如何在C++中将无符号char []打印为HEX?

lou*_*luo 11 c++ printf hex unsigned-char

我想打印以下散列数据.我该怎么办?

unsigned char hashedChars[32];
SHA256((const unsigned char*)data.c_str(),
       data.length(), 
       hashedChars);
printf("hashedChars: %X\n", hashedChars);  // doesn't seem to work??
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 16

十六进制格式说明符期望一个整数值,但您提供的是一个数组char.您需要做的是将char值单独打印为十六进制值.

printf("hashedChars: ");
for (int i = 0; i < 32; i++) {
  printf("%x", hashedChars[i]);
}
printf("\n");
Run Code Online (Sandbox Code Playgroud)

因为您使用的是C++,所以您应该考虑使用C++ cout而不是printf(它对C++来说更为惯用).

cout << "hashedChars: ";
for (int i = 0; i < 32; i++) {
  cout << hex << hashedChars[i];
}
cout << endl;
Run Code Online (Sandbox Code Playgroud)

  • FWIW,必须转换为`unsigned int`,即`hex &lt;&lt; (unsigned int)hashedChars[i]` 才能让它为我工作。 (6认同)
  • `printf`也是有效的C++!有时我使用它代替流.它有它的位置. (5认同)
  • 您需要确保为每个 `char` 输出 2 位数字,否则输出中会丢失一些零。对于 printf 将格式更改为 `%02X`,不知道 cout 该怎么做。 (3认同)
  • @vidit用户提出了'printf`的问题所以我决定回答这个问题.他们显然对`printf`的工作原理有点困惑,我想清楚这一点 (2认同)