Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中将无符号字符[]打印为十六进制+;?_C++_Hex_Printf_Unsigned Char - Fatal编程技术网

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;iSTD::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]) << " ";
}