一個好用的hash函數(C語言)


 1 typedef unsigned int  DWORD;
 2 typedef unsigned char BYTE;
 3 
 4 /**********************************************************************
 5 * 函數名稱:  mk_hash_index
 6 * 功能描述:  由Key值產生hash索引值
 7 * 輸入參數:
 8          pstHashKey:       指向KEY的內容(要強轉成DWORD*)
 9          dwHashCount:    hash表中結點的數目
10          dwLen    :         KEY的長度     
11 * 返 回 值:     dwHashVal : hash索引值
12 *作者/時間:     曹國平2014/02/27
13 ***********************************************************************/
14 inline DWORD mk_hash_index(DWORD* pstHashKey, DWORD dwHashCount, DWORD dwLen)
15 {
16     DWORD dwi  ;
17     BYTE* pKeyEnd ;
18     DWORD* pKey ;
19     DWORD dwKeyLen;
20     DWORD dwHashVal = dwHashCount ; 
21   
22     dwKeyLen = dwLen;
23     pKey = (DWORD*)(pstHashKey);
24 
25     for(dwi = dwKeyLen/sizeof(DWORD); dwi>0; dwi--)
26     {
27         dwHashVal = ((dwHashVal << 5) + dwHashVal) + *pKey ;
28         pKey++ ;
29     }
30     dwi = sizeof(DWORD) - (dwKeyLen%sizeof(DWORD)) ;
31     pKeyEnd = (BYTE*)pKey+3 ;
32     while(dwi-- > 0)
33     {
34         *pKeyEnd-- = 0 ;
35     }
36     dwHashVal = ((dwHashVal << 5) + dwHashVal) + *pKey ;
37     dwHashVal = dwHashVal % dwHashCount ;
38     return dwHashVal ;
39 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM