연구 프로젝트의 일환으로 Eternally Confuzzled에서 찾은 일부 해시 함수를 테스트했습니다. here. 이 프로젝트는 페이지 캐싱 알고리즘과 관련이 있으며 해시 동작 자체는 지금까지는 결코 중요하지 않았지만 지금도 내 호기심을위한 것입니다. 테스트에, 나는 다음과 같은 코드를 사용하고 있습니다 :다른 프로그램 실행간에 해시 값이 일치하지 않는 이유는 무엇입니까?
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
unsigned oat_hash(void *key, int len);
int main()
{
string name;
cout << "Enter a name: ";
getline(cin, name);
cout << "Hash: " << oat_hash(&name, sizeof(string)) << endl << endl;
cout << "Enter the name again: ";
getline(cin, name);
cout << "Hash: " << oat_hash(&name, sizeof(string)) << endl << endl;
return 0;
}
unsigned oat_hash(void *key, int len)
{
unsigned char *p = (unsigned char*) key;
unsigned h = 0;
for (int i = 0; i < len; i++) {
h += p[i];
h += (h << 10);
h ^= (h >> 6);
}
h += (h << 3);
h ^= (h >> 11);
h += (h << 15);
return h;
}
프로그램 실행을 하나 출력 :
Enter a name: John Doe
Hash: 4120494494
Enter the name again: John Doe
Hash: 4120494494
프로그램 실행이 출력 :
Enter a name: John Doe
Hash: 3085275063
Enter the name again: John Doe
Hash: 3085275063
나는 같은 문자열을 입력하고있어 동일한 프로그램 실행 중에 동일한 해시 값을 사용하지만 다른 프로그램 실행에 대해 값이 다른 이유는 무엇입니까? 다른 해시 값이 다른 데이터를 나타내지 않습니까?
난 그냥 5 개 실행을했고, 동일한 출력을 얻었다. – Ben
아마도 공백을 입력했는데 실현하지 못했을 것입니다. – Ben
그건 내가 처음에 생각한 것이지만, 나는 그것을 확인했다. 나는 다른 입력과 결과 (다른 프로그램 실행을위한 다른 해시 값을 얻는 결과)를 사용했습니다. –