ELFHash算法解释

来源:互联网 发布:斗鱼抢票软件多少钱 编辑:程序博客网 时间:2024/06/05 06:36

最近看UCC源码时,看到作者处理字符串哈希时,使用了ELFHash函数,于是查阅了一点资料,对这个算法作了个了解,记录哈

[cpp] view plain copy
  1. // ELF Hash Function  
  2. unsigned int ELFHash(char *str)  
  3. {  
  4.     unsigned int hash = 0;  
  5.     unsigned int x = 0;  
  6.   
  7.     while (*str)  
  8.     {  
  9.         hash = (hash << 4) + (*str++);//hash左移4位,把当前字符ASCII存入hash低四位。   
  10.         if ((x = hash & 0xF0000000L) != 0)  
  11.         {  
  12.             //如果最高的四位不为0,则说明字符多余7个,现在正在存第7个字符,如果不处理,再加下一个字符时,第一个字符会被移出,因此要有如下处理。  
  13.             //该处理,如果最高位为0,就会仅仅影响5-8位,否则会影响5-31位,因为C语言使用的算数移位  
  14.             //因为1-4位刚刚存储了新加入到字符,所以不能>>28  
  15.             hash ^= (x >> 24);  
  16.             //上面这行代码并不会对X有影响,本身X和hash的高4位相同,下面这行代码&~即对28-31(高4位)位清零。  
  17.             hash &= ~x;  
  18.         }  
  19.     }  
  20.     //返回一个符号位为0的数,即丢弃最高位,以免函数外产生影响。(我们可以考虑,如果只有字符,符号位不可能为负)  
  21.     return (hash & 0x7FFFFFFF);  
  22. }  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 顾客恶意差评怎么办 淘宝不能看视频怎么办 天猫精灵打不开怎么办 手机淘宝卡死了怎么办 为什么电视盒子打不开怎么办 天猫买了降价了怎么办 试用报告未提交怎么办 试用中心拉黑怎么办 淘宝赠品破了怎么办 淘宝卖家不给赠品怎么办 淘宝赠品有瑕疵怎么办 淘宝赠品不发货怎么办 移动电视没信号怎么办 网络电视死机了怎么办 电视接收网络信号不好怎么办 tcl电视待机打不开怎么办 宽带电视看不了怎么办 电视总是闪退怎么办 电视出现系统更新怎么办 电视一直在更新怎么办 电视更新死机了怎么办 法院打电话不接怎么办 内向不敢辞职怎么办呀 生气后睡不着觉怎么办 被气得睡不着怎么办 一生气就睡不着怎么办 手机接电话声音小怎么办 发微信老公不回怎么办 欠钱没有欠条怎么办 朋友欠钱不还怎么办没欠条 个人欠销售货款怎么办 货款一直不还怎么办 欠钱不接电话找不到人怎么办 欠钱人电话不接怎么办 客户欠款不给怎么办 客户货款打一半怎么办 欠款人不到庭怎么办 别人打电话不接怎么办 百合注册被禁用怎么办? 监控显示未登录怎么办 发票认证了两次怎么办