嗨,我有这是VS2010编写的代码:

unsigned long CHwFingerprint::toHash(wstring& wmisignature)
{
    if (wmisignature.empty())
        wmisignature = _empty;

    hash<wstring> str_hash;
    unsigned long hash = (unsigned long)str_hash(wmisignature);
    return hash;
}

* wstring只是我们创建的Unicode字符串,可以用作CString ...

现在,在VS 2015中使用此代码时,我得到了不同的结果。
例如,如果wmisignature=HMT351U6CFR8C-PB然后结果如下:
  • VS 2010:哈希= 229184272
  • VS 2015:哈希= 4005003184

  • 有什么想法吗?

    最佳答案

    实际的哈希函数取决于实现,因此可能与编译器有所不同...

    从C++ 14开始:

    散列函数只需要在程序的一次执行中为相同的输入产生相同的结果即可;这允许使用盐腌的哈希来防止冲突拒绝服务攻击。

    08-17 07:17