将"String"对象传递到 DJB2 哈希函数中

Passing a "String" Object into a DJB2 hash function

本文关键字:DJB2 哈希 函数 String 对象      更新时间:2023-10-16

我使用的是djb2哈希函数的标准char *版本:

unsigned long(unsigned char *str){
    unsigned long hash = 5381;
    int c;
    while (c = *str++)
        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
    }

我怎么能编辑这个哈希函数接受一个字符串对象,而不是一个无符号char*?

用字符串代替?

unsigned long DJB2(std::string str){
    unsigned long hash = 5381;
    int c;
    for (int i = 0; i < str.length(); ++i) {
        c = (int) str[i];
        hash = ((hash << 5) + hash) + c; 
    }
    return hash;
}