здесь у меня есть код вычислить хеш-значения неподписанного символадлина высчитывает из неподписанного символа
#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;
}
имени этого хэш-функция так называется One-на-время хэша (Боб Jenkins) У меня есть один вопрос в том, что эта небольшая часть кода правильная?
int n=sizeof(mystring)/sizeof(mystring[0]);//length of mystring
потому mysting не встроенная функция длины, я использовал этот
Поскольку это 'unsigned char []', я считаю, что вам нужно будет преобразовать 'unsigned char *' в 'const char *' для 'std :: strlen' (также, счет будет 15 вместо 16). –
@Jesse: Чтобы полностью понять отличный совет в ответе Джеффри (+1), вы можете взглянуть на этот [C++ Faq] (http://stackoverflow.com/questions/9460260/what-is-the -difference-between-char-a-string-and-char-p-string). –
@Als: Я не уверен, что C++ faq имеет отношение к моему комментарию. –