用字符串函数进行C++循环

C++ Looping with String Functions

本文关键字:C++ 循环 字符串 函数      更新时间:2023-10-16

我正在努力实现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;

您需要将数字i转换为SHA接受的字符串i。一个简单的选项是使用std::to_string C++11函数

std::cout << sha256(std::to_string(i)); 

如果你没有访问C++11编译器的权限(你应该有,现在差不多是2016年了),你可以浏览一下这个优秀的链接:

在C++中将int转换为字符串的最简单方法

使用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; 
    }
}