如何在C++中准确地计算lops示例:计算哈希

How do for-lops exactly work in C++ example: calculating hashes

本文关键字:计算 lops 示例 哈希 C++      更新时间:2023-10-16

我试图找出在什么时间可以计算多少哈希。我使用的是SHA-512(具有512位输出的SHA-2)。我没有编写这个Hash函数,但我做了一个foor循环来测试它。我对C++不是很熟悉,所以我不知道为什么会出现以下情况。

当我执行这个程序时,计算时间越来越长。虽然我在最初的几秒钟内有大约10000个哈希,但几个小时后,我的电脑花了大约一分钟的时间来计算1000个哈希。。。有人能告诉我为什么以及如何"解决"这个问题吗?

这是相关的代码,我想:

int fortschritt = 0;
int prozent = 0;
string temp;
stringstream convert;
string loeschen;
for (int i = 1; i <= 4294967295; i++)
{
    convert << i;
    temp = convert.str();
    loeschen = sha512(temp);
    if (((int)(i/1000)) > fortschritt)
    {
        fortschritt = (int)(i/1000);
        if (((int)(i*100)/4294967295) > prozent)
        {
            prozent = ((int)(i*100)/4294967295);
        }
        cout << fortschritt*1000 << " von 4294967295 - " << prozent << " %" << endl;
    }
}

输出如下:

1000 von 4294967295 - 0 %
2000 von 4294967295 - 0 %
3000 von 4294967295 - 0 %
4000 von 4294967295 - 0 %
5000 von 4294967295 - 0 %
6000 von 4294967295 - 0 %
7000 von 4294967295 - 0 %
8000 von 4294967295 - 0 %
9000 von 4294967295 - 0 %
10000 von 4294967295 - 0 %
[...]

我认为这与我使用变量的方式有关,但我不确定,也不知道如何正确使用。如果这是一个愚蠢的问题,请原谅我,但它困扰了我一段时间。

提前感谢您的帮助:)

John

看起来convert流在每次迭代中都会持续增长,每次都会附加新值。最简单的修复方法是在for循环中移动stringstream convert;的声明,每次创建一个新声明。

进一步的优化当然是可能的,因为在主循环中进行大量迭代时,将数字转换为字符串的方式并不有效。