iはunsigned char型の計算ハッシュ値のためのコードを有する計算長ここで
#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;
}
このハッシュ関数の名前は私が1つを持っている(ボブ・ジェンキンスによって)1つずつハッシュと呼ばれています質問は、コードのこの小さな部分は正しいですか?
int n=sizeof(mystring)/sizeof(mystring[0]);//length of mystring
mystingが内蔵されていないため、関数の長さ、私ははい、この状況下では
'unsigned char []'なので、 'std :: strlen'の' unsigned char * 'を' const char * 'に変換する必要があると思います(カウントは16ではなく15になります)。 –
@Jesse:Jeffryの答えの優れたアドバイス(+1)をよく理解するには、この[C++ Faq](http://stackoverflow.com/questions/9460260/what-is-the -difference-between-char-a-string-and-char-p-string)エントリを使用します。 –
@Als:私のコメントにC++のFAQが関係しているかどうか分かりません。 –