C++ Setw和setfill,如图所示';在SHA256哈希函数中使用

C++ Setw和setfill,如图所示';在SHA256哈希函数中使用,c++,hash,openssl,std,C++,Hash,Openssl,Std,在学习OpenSSL的一些基础知识时,我遇到了以下代码: 使用名称空间std; #包括 字符串sha256(常量字符串str) { 无符号字符哈希[SHA256_摘要_长度]; SHA256_CTX SHA256; SHA256_Init(&SHA256); SHA256_更新(&SHA256,str.c_str(),str.size()); SHA256_Final(散列和SHA256); 细流ss; 对于(int i=0;i C++中有许多不同的流。您可能知道“代码> CUT/CODE >将

在学习OpenSSL的一些基础知识时,我遇到了以下代码:

使用名称空间std;
#包括
字符串sha256(常量字符串str)
{
无符号字符哈希[SHA256_摘要_长度];
SHA256_CTX SHA256;
SHA256_Init(&SHA256);
SHA256_更新(&SHA256,str.c_str(),str.size());
SHA256_Final(散列和SHA256);
细流ss;
对于(int i=0;iSc< P> C++中有许多不同的流。您可能知道“代码> CUT/CODE >将输出写入控制台,并且<代码> CIN < /Cord>读取输入。它是对象写入和读取对象的类。写入字符串流(如变量<代码> SS< /代码>)就像写入
cout
,但写入字符串而不是控制台

您说您已经编写了C?那么您应该知道十六进制表示法,对吧?这就是告诉流使用的。这类似于
printf
格式说明符
%x

设置下一个输出的字段宽度

设置输出的填充字符

最后,将
hash[i]
强制转换为
int
是因为
hash[i]
是一个
char
,输出到流将把它写为一个字符而不是一个小整数

总之,

ss << hex << setw(2) << setfill('0') << (int)hash[i];

你知道每个操纵器自己做什么吗?你在打印到
std::cout
时尝试过它们吗?那么你应该解释一下这些操纵器以及它们的作用。你也可以将输出到
cout
而不是
ss
,看看你得到了什么。最重要的是,实验!:)所以我不知道,我对STD几乎一无所知:任何事情,我只是从C转换到C++,我很难同时学习所有的事情,并且有一个完美的答案。
ss << hex << setw(2) << setfill('0') << (int)hash[i];
sprintf(temporaryBuffer, "%02x", hash[i]);
strcat(ss, temporaryBuffer);