Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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++_String_Hash_Sha1_Hmacsha1 - Fatal编程技术网

C++ 将十六进制格式的无符号整数转换为字符串

C++ 将十六进制格式的无符号整数转换为字符串,c++,string,hash,sha1,hmacsha1,C++,String,Hash,Sha1,Hmacsha1,我正在为考试开发hmac-sha1课程。我有一个问题,当我必须申请sha-1两次,如中所述 当我将sha1应用于字符串时,它会返回一个无符号int[5],并计算哈希值。我想将无符号int[5]转换为带有散列的char[40] 比如说 unsigned int H[5] = { 67452301, EFCDAB89, 98BADCFE, 10325476, C3D2E1F0 }; // char [40] will be "67452301EFCDAB8998BADCFE10325476C3D2

我正在为考试开发hmac-sha1课程。我有一个问题,当我必须申请sha-1两次,如中所述

当我将sha1应用于字符串时,它会返回一个无符号int[5],并计算哈希值。我想将无符号int[5]转换为带有散列的char[40]

比如说

unsigned int H[5] = { 67452301, EFCDAB89, 98BADCFE, 10325476, C3D2E1F0 };

// char [40] will be "67452301EFCDAB8998BADCFE10325476C3D2E1F0"
所以,我可以将它连接到ipad,然后计算他的hash-ipad\u-hash,最后计算连接这两个字符串的opad+ipad\u-hash

是这样吗

我使用的是arduino uno,所以“unsigned int”是“unsigned long”

这是我的测试代码(乱七八糟,但我会清理它):

你可以这样做

char hash_cstr[41];
sprintf(hash_cstr, "%08lX%08lX%08lX%08lX%08lX", H[0], H[1], H[2], H[3], H[4])
确保至少分配41个字符(40个用于代码,1个用于空终止符)


在格式中,字符串%08X 08表示使用0填充到8个字符,这样您就可以得到中间字节的前导0,而X表示使用大写字符的十六进制格式。您可以使用小写x表示小写字符。十六进制格式自动假定为无符号。您可以将lX用于64位类型。

如果我使用Serial.print(H[I],十六进制)打印H,它将显示我“1E4E888AC66F8DD41E00C5A7AC36A32A9950D271”->正确,如果我打印hash_cstr,它将显示我“000088A00001E4E00008DD40000C66F0000C5A7”->错误。H是一个无符号整数数组,hash_cstr是一个字符数组。@FloydCrimson您的编译器已将整数定义为16位,因此您只能用X获得2个字节。请尝试使用lX或llX。我建议将总共4个字节中的前2个字节与第二个2个字节交换。使用sprintf,我可以读取整个字符串的一半。。。