典型Hash算法实现
DJBHash
unsigned int DJBHash(char *str) { unsigned int hash = 5381; while(*str) { hash = ((hash << 5) + hash) + (*str++); } hash &= ~(1 << 31); return hash; }
MurMurHash
uint32_t ngx_murmur_hash2(u_char *data, size_t len) { uint32_t h,k; h = 0^len; while(len>=4) { k = data[0]; k |= data[1] << 8; k |= data{2] << 16; k |= data[3] << 24; k *= 0x5bd1e995; k ^= k >> 24; k *= 0x5bd1e995; data += 4; len -= 4; } switch(len) { case 3: h ^= data[2] << 16; case 2: h ^= data[1] << 8; case 1: h ^= data[0]; h *= 0x5bd1e995; } h ^= h >> 13; h *= 0x5bd1e995; h ^= h >> 15; return h; }

浙公网安备 33010602011771号