完整指南:4 步部署 Folia 全屏歌词播放器并装进手机主屏
2026/11/6 5:11:41
#include"stdio.h"//ELF Hash算法unsignedintELFHash(char*str){unsignedinthash=0;unsignedintx=0;while(*str){hash=(hash<<4)+(*str++);if((x=hash&0xF0000000L)!=0){hash^=(x>>24);hash&=~x;}}return(hash&0x7FFFFFFF);}//Jenkins Hash算法unsignedintJenkinsHash(char*str,unsignedintlen){unsignedinthash=0;unsignedinti=0;for(i=0;i<len;str++,i++){hash+=(*str)+(hash<<10);hash^=(hash>>6);}hash+=(hash<<3);hash^=(hash>>11);hash+=(hash<<15);return(hash&0x7FFFFFFF);}unsignedintDJBHash(char*str){unsignedinthash=5381;while(*str){hash+=(hash<<5)+(*str++);}return(hash&0x7FFFFFFF);}unsignedintAPHash(char*str){unsignedinthash=0;inti;for(i=0;*str;i++){if((i&1)==0){hash^=((hash<<7)^(*str++)^(hash>>3));}else{hash^=(~((hash<<11)^(*str++)^(hash>>5)));}}return(hash&0x7FFFFFFF);}intmain(){}下表从核心思路、运算方式、分布特性、适用场景等方面对比上述四种字符串 Hash 算法:
| 算法 | 核心公式 | 运算方式 | 分布性 | 适用场景 |
|---|---|---|---|---|
| ELF Hash | (hash << 4) + c,高 4 位溢出时回卷 | 移位 4 位 + 异或回卷 | 均匀,冲突率低 | Unix ELF 符号表、文件系统 |
| Jenkins Hash | hash += c + (hash << 10),再多次异或移位 | 移位 10/6/11/15,混合充分 | 雪崩效应好 | 通用哈希表、短字符串 |
| DJB Hash | hash = hash * 33 + c | 乘 33(等价于 <<5 后自加) | 简单高效,分布尚可 | 快速哈希、glibc 字符串 |
| AP Hash | 奇偶位交替执行不同位移异或 | 移位 7/11/3/5,奇偶分支 | 分布均匀,冲突低 | 通用字符串哈希 |
选用建议:
四个函数最后都执行hash & 0x7FFFFFFF,只保留低 31 位,保证返回值是非负整数,便于直接作为数组下标或桶编号。