C ++ - 哈希算法代码返回Nothing

时间:2017-12-02 14:49:25

标签: c++ algorithm hash

我今天来问一个涉及一些代码的问题。

我在C ++中编写了一个自定义哈希算法。 但是程序运行没有任何错误,但同时它什么都不打印。

我正在研究一个Alt-Coin方面的项目,尽管我知道它对所有其他Alt-Coins都没有任何价值。 我决定编写自己的哈希算法,而不是使用其他类型的哈希算法来处理我的硬币块链和其他所需的东西。

我过去曾被告知我不应该使用自己的自定义加密或散列,但我决定尝试一下。

有人可以告诉我为什么这不能正常工作。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

typedef unsigned int dword;

struct
{
    dword count;
    dword recept;
    dword multiple = 13;
    dword divisible = 1.6;
    dword subhexvalue;
    std::vector<dword> endrecept;
} SMDH;

inline dword smdh(std::string data)
{
    for (SMDH.count; SMDH.count < data.length(); SMDH.count++)
    {
        SMDH.recept = SMDH.recept ^ (data[SMDH.count]) * SMDH.multiple / SMDH.divisible + SMDH.recept;
    }
    for (SMDH.count = data.length(); SMDH.count >= 0; --SMDH.count)
    {
        SMDH.subhexvalue = ((SMDH.recept >> (4 * SMDH.count)) % 16);
        if (SMDH.subhexvalue < 10) {SMDH.endrecept.push_back(SMDH.subhexvalue); }
        else { SMDH.endrecept.push_back((char)'A' + (SMDH.subhexvalue - 10)); }
    }
    for (SMDH.count = 0; SMDH.count < sizeof(SMDH.endrecept) / sizeof(SMDH.endrecept[0]); ++SMDH.count)
    {
        SMDH.recept = (SMDH.recept >> SMDH.endrecept[SMDH.count]); 
    }
    return SMDH.recept;
}

int main()
{
    std::cout << smdh("testing");
    std::getchar();
    return 0;
}

输出假设是对字符串中的每个字节进行异或,然后将其相乘然后除以自然相加。然后它假设转换为十六进制。

我没有任何错误只是一个空白的回复。

1 个答案:

答案 0 :(得分:1)

第二个循环永远不会完成。 SMDH.count是无符号类型,SMDH.count >= 0始终为真。由于循环在每次迭代时都会向量添加,最终程序会耗尽内存,抛出bad_alloc并终止。