记录学习过程中的点点滴滴
字符串的哈希算法hnv的介绍和实现
fnv全称”Fowler/Noll/Vo”,特点是快速而且冲突率比较低,在url hostname或者ip的哈希有广泛的应用, 详细信息请点击这里
下面是fnv在Sheepdog中用法的实现,将任意字符串转化为uint64_t
/* * 64 bit FNV-1a non-zero initial basis */ #define FNV1A_64_INIT ((uint64_t) 0xcbf29ce484222325ULL) /* * 64 bit Fowler/Noll/Vo FNV-1a hash code */ static inline uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval) { unsigned char *bp = (unsigned char *) buf; unsigned char *be = bp + len; while (bp < be) { hval ^= (uint64_t) *bp++; hval += (hval << 1) + (hval << 4) + (hval << 5) + (hval << 7) + (hval << 8) + (hval << 40); } return hval; }
您可能对下面文章也感兴趣:
这篇文章由admin于2011 年 03 月 16 日 17:35发表在Linux编程, 编程语言与算法设计。你可以订阅RSS 2.0 你可以跳到结尾直接评论。目前不允许通知。 |