AndrewTomazos- Fathomlingが言ったように、64ビットで安全なハッシュを行うことは不可能なので、それがあなたの意図であるなら、私のアドバイスはやめて、本を手に取り、暗号的に安全なハッシュについて読んでください。
これを安全なハッシュとして使用する予定がなく、衝突や攻撃を気にしない場合は、彼の答えは問題なく機能し、必要に応じて素数P1とP2を微調整できます。タグ付きハッシュを実行し、物事をさらに混乱させる別の方法を紹介します。
// Disclaimer: I make no claims about the quality of this particular hash - it's
// certainly not a cryptographically secure hash, nor should it *ever* be
// construed as such.
unsigned long long quickhash64(const char *str, unsigned long long mix = 0)
{ // set 'mix' to some value other than zero if you want a tagged hash
const unsigned long long mulp = 2654435789;
mix ^= 104395301;
while(*str)
mix += (*str++ * mulp) ^ (mix >> 23);
return mix ^ (mix << 37);
}