我在this实施SHA-256时涂鸦。我试图编写一个生成sha(0),sha(1),...的程序,但我无法做到。天真的我试过
#include <iostream>
#include "sha256.h"
int main(int argc, char *argv[]){
for (int i=0; i < 4; i++)
std::cout << sha256("i");
return 0;
}
当然,这不会产生sha256(0),sha256(1),...,而是将i解释为字母i,而不是整数变量i。关于如何解决这个问题的任何建议?改变功能实现本身是不可行的,所以我正在寻找另一种方式。显然,我根本不了解C ++,但任何建议都会受到高度赞赏。
编辑:
#include <iostream>
#include "sha256.h"
#include <sstream>
int main(int argc, char *argv[])
{
std::cout << "This is sha256("0"): \n" << sha256("0") << std::endl;
std::cout << "Loop: " << std::endl;
std::stringstream ss;
std::string result;
for (int i=0; i < 4; ++i)
{
ss << i;
ss >> result;
std::cout << sha256(result) << std::endl;
}
return 0;
答案 0 :(得分:4)
您需要将数字i
转换为SHA接受的字符串i
。一个简单的选择是使用std::to_string
C ++ 11函数
std::cout << sha256(std::to_string(i));
如果您无法访问C ++ 11编译器(您应该拥有,几乎是2016年),您可以浏览一下这个优秀的链接:
Easiest way to convert int to string in C++
使用std::stringstream
快速(不是最有效)的方式:
#include <iostream>
#include <sstream>
#include "sha256.h"
int main()
{
std::string result;
std::stringstream ss;
for (int i = 0; i < 4; i++)
{
ss << i;
ss >> result;
ss.clear(); // need to clear the eof flag so we can reuse it
std::cout << sha256(result) << std::endl;
}
}