我試圖散列一個unsigned long
值,但是哈希函數接受一個unsigned char *
,如下面的實施看出:如何將無符號長符號轉換爲unsigned char *?
unsigned long djb2(unsigned char *key, int n)
{
unsigned long hash = 5381;
int i = 0;
while (i < n-8) {
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
hash = hash * 33 + key[i++];
}
while (i < n)
hash = hash * 33 + key[i++];
return hash;
}
有沒有一種方法可以讓我實現我的目標,也許與兩者之間的投?
的reinterpret_cast,但它的醜陋。什麼哈希函數需要char *? – Pubby 2013-05-14 07:07:46
@Pubby,'reinterpret_cast'是C++,問題是C. – 2013-05-14 07:14:11
它可能只是我,但我認爲在這個問題中應該有更多的上下文(即更多的代碼)。 – tay10r 2013-05-14 07:14:36