C++ 如何在C+中将无符号字符[]打印为十六进制+;?
我想打印以下散列数据。我该怎么做C++ 如何在C+中将无符号字符[]打印为十六进制+;?,c++,hex,printf,unsigned-char,C++,Hex,Printf,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?? 十六进制格式说明符需要一个整数值,但您提供的是一个字符数组。您需要做的是将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??
十六进制格式说明符需要一个整数值,但您提供的是一个字符数组。您需要做的是将
char
值单独打印为十六进制值
printf("hashedChars: ");
for (int i = 0; i < 32; i++) {
printf("%x", hashedChars[i]);
}
printf("\n");
在C中++
#包括
#包括
无符号字符buf0[]={4,85,250,206};
for(int i=0;i STD::CUT @ VIDIT用户用“代码> Prtff<代码>给出问题,所以我决定回答这个问题。他们显然有点困惑,关于<代码> Prtff<代码>是如何工作的,我想澄清“代码> Prtff<代码>也是有效的C++!有时我用它代替流。它有它的位置。@ JaredPar…所以<代码> PrtTf。
实际上对我有效,但是cout
对我无效。我正在使用xCode
和“hashedChars:”已打印,但其余部分未打印。您需要确保每个char
输出两位数字,否则输出中将缺少一些零。对于printf,请将格式更改为%02X
,不确定如何为cout执行此操作。FWIW必须转换为unsigned int
,即十六进制。您可以解释一下“0xFF&”吗虽然需要使用0xFF&
使其工作,但是,我必须承认,对于这种情况来说,它不是最常用的方法。0xFF&
将无符号字符
提升为int
,这样它将导致调用std::cout的适当重载方法。确实,在您的响应之后e、 我试图深入研究cout功能。转换似乎与移位运算符not to cout有关。有关更多信息,请参阅此。bool的移位返回int。作为证明:bool b=true;bool d=(b)你关于的发现是完全正确的!我将你关于“Anding”的想法整合到我的单元测试中,并且在评论时忘记了你的例子。你没有使用任何转换!
cout << "hashedChars: ";
for (int i = 0; i < 32; i++) {
cout << hex << hashedChars[i];
}
cout << endl;
#include <iostream>
#include <iomanip>
unsigned char buf0[] = {4, 85, 250, 206};
for (int i = 0;i < sizeof buf0 / sizeof buf0[0]; i++) {
std::cout << std::setfill('0')
<< std::setw(2)
<< std::uppercase
<< std::hex << (0xFF & buf0[i]) << " ";
}