gpt4 book ai didi

Javascript:请帮助我将此 C 函数转换为 Javascript

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:44 24 4
gpt4 key购买 nike

我有以下 C 函数:

unsigned int DJBHash(char* str, unsigned int len)
{
unsigned int hash = 5381;
unsigned int i = 0;

for(i = 0; i < len; str++, i++)
{
hash = ((hash << 5) + hash) + (*str);
}

return hash;
}

我正在尝试将其转换为 Javascript。我在处理第 8 行的 (*str) 部分时遇到问题

(`hash=((hash << 5) + hash) + (*str)`).

如何高效将我的 javascript 字符串转换为与 C 相同的表示形式?

这是我到目前为止所做的,但它不起作用:当我将零添加到“str”时,它只是将一个字符“0”附加到我的 str。我做错了什么?

function DJBHash(str,len){
var hash=5381;
var i=0;

for(i=0;i<len;i++){
hash=((hash<<5)+hash)+(str+0);
}
return hash;
}

最佳答案

Javascript 中没有指针。将输入视为字符串而不是指向字符串的指针。字符串有长度,所以你不需要将它作为参数发送,并且字符串对象有 charCodeAt 方法,你可以在循环中使用它来获取特定字符的字符代码:

function DJBHash(str) {
var hash = 5381;
for(var i = 0; i < str.length; i++) {
hash = ((hash << 5) + hash) + str.charCodeAt(i);
}
return hash;
}

但是,C 代码可能依赖于 int 具有特定大小(然而这不符合 C 规范),以使用溢出将结果限制为特定数量位。由于 Javascript 没有任何整数类型,您将不得不使用整数运算以相同的方式限制结果。这将产生 32 位结果:

function DJBHash(str) {
var hash = 5381;
for(var i = 0; i < str.length; i++) {
hash = (((hash << 5) + hash) + str.charCodeAt(i)) & 0xffffffff;
}
return hash;
}

关于Javascript:请帮助我将此 C 函数转换为 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831845/

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