這裏我有無符號字符名稱該散列函數的計算長度
#include <cstdlib>
#include <iostream>
#include<string.h>
using namespace std;
unsigned oat_hash(unsigned char *key,int len)
{
unsigned char *p=key;
unsigned h=0;
int i;
for(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;
}
using namespace std;
int main(int argc, char *argv[])
{
unsigned char mystring[]="123456789abcdef";
unsigned char *key=&mystring[0];
int n=sizeof(mystring)/sizeof(mystring[0]);//length of mystring
cout<<oat_hash(key,n)<<endl;
//system("PAUSE");
//return EXIT_SUCCESS;
return 0;
}
的計算散列值的代碼是所謂的單在-A-時間散列(由Bob詹金斯)1具有一個問題是這部分代碼正確嗎?
int n=sizeof(mystring)/sizeof(mystring[0]);//length of mystring
因爲mysting沒有內置功能長度,我用這個
因爲它是'無符號的字符[]',我相信你會需要'無符號字符*'轉換爲'爲const char *''對的std :: strlen'(也,則將被計爲15而不是16)。 – 2012-03-16 06:08:12
@Jesse:要充分認識在傑弗裏的答案(+1)的優秀建議,您可能想看看這個[C++ FAQ(http://stackoverflow.com/questions/9460260/what-is-the -char-a-string-and-char-p-string)條目。 – 2012-03-16 07:23:14
@Als:我不確定C++常見問題與我的評論有什麼關係。 – 2012-03-16 08:20:15