我试图找出我可以在什么时候计算出多少哈希值。我正在使用 SHA-512(具有 512 位输出的 SHA-2)。我没有编写这个 Hashfunction,但我做了一个 foor 循环来测试它。我对C++不是很熟悉,所以我不知道为什么会出现以下情况。
当我执行程序时,计算时间越来越长。虽然我在开始的几秒钟内有大约 10000 个哈希值,但几个小时后我的 PC 花了大约一分钟来计算 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 %
[...]
我认为这与我使用变量的方式有关,但我不确定,也不知道如何正确使用。 如果这是一个愚蠢的问题,请原谅我,但它现在困扰了我一段时间。
在此先感谢您的帮助:)
约翰
最佳答案
看起来您的 convert
流在每次迭代中不断增长,每次都附加新值。最简单的解决方法是将 stringstream convert;
的声明移到 for 循环中,每次都创建一个新的。
进一步的优化当然是可能的,因为在主循环中进行大量迭代时,将数字转换为字符串的方式效率不高。
关于c++ - for-lops 如何在 C++ 示例 : calculating hashes 中准确工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784871/