gpt4 book ai didi

c++ - 计算无符号字符的长度

转载 作者:行者123 更新时间:2023-11-30 02:05:13 28 4
gpt4 key购买 nike

这里有计算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;
}

这个散列函数的名称被称为一次一次散列(由 Bob Jenkins 设计)我有一个问题,这段代码是否正确?

int n=sizeof(mystring)/sizeof(mystring[0]);//length of mystring

因为mysting没有内置函数length,所以我用了这个

最佳答案

在这种情况下,是的——但它非常脆弱。例如,如果您将定义更改为:

unsigned char mystring[]="123456789abcdef";

收件人:

unsigned char *mystring="123456789abcdef";

您计算长度的方法会产生完全不正确的结果。另请注意,由于您的字符串由 char 组成,因此 /sizeof(mystring[0]) 也不是真正必需的 -- sizof(char ) == 1(对于 signed charunsigned char 也是如此)。

您通常希望改用 strlen

关于c++ - 计算无符号字符的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9732642/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com