Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ lops在C++;示例:计算哈希_C++_Hash_Sha_Execution Time_Sha512 - Fatal编程技术网

C++ lops在C++;示例:计算哈希

C++ lops在C++;示例:计算哈希,c++,hash,sha,execution-time,sha512,C++,Hash,Sha,Execution Time,Sha512,我想知道在哪段时间我能计算出多少散列。我使用的是SHA-512(具有512位输出的SHA-2)。我没有编写这个Hashfunction,但是我做了一个foor循环来测试它。我并不是真正的C++程序员,所以我不知道为什么会出现以下情况。 当我执行程序时,计算时间越来越长。虽然在最初几秒钟内我有大约10000个哈希,但几小时后我的电脑花了大约一分钟来计算1000个哈希。。。有人能告诉我为什么以及如何“解决”这个问题吗 我猜这是相关代码: int fortschritt = 0; int prozen

我想知道在哪段时间我能计算出多少散列。我使用的是SHA-512(具有512位输出的SHA-2)。我没有编写这个Hashfunction,但是我做了一个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;
    }
}
我认为这与我使用变量的方式有关,但我不确定,也不知道如何正确使用。 如果这是一个愚蠢的问题,请原谅我,但它现在困扰了我一段时间

提前感谢您的帮助:)


John

看起来您的
convert
流在每次迭代中都会不断增长,每次都会追加新值。最简单的修复方法是移动
stringstreamconvert的声明在for循环内,每次创建一个新循环


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

谢谢,我会尝试一下。你有没有更好的方法,如何转换数字?现在计算速度非常快,真是太好了!您的sha512方法接受一个字符串,我假设您不想更改它。我将使用字符串的“fill”构造函数在循环外为字符串预先分配足够大的内存,以容纳最大的数字。然后使用一种有效的方法,如普通的旧'C'itoa()函数,将每个整数直接转换为支持字符串的字符缓冲区。流的开销可以完全消除。所有这些除法对您的程序来说都不健康,请制作一个额外的计数器j,该计数器的值达到1000,以输入fortschritt if,在这里重置它。
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 %
[...]