找到一个C++的哈希函数,如下:// RS Hash Function
unsigned int RSHash( char * str)
{
unsigned int b = 378551 ;
unsigned int a = 63689 ;
unsigned int hash = 0 ; while ( * str)
{
hash = hash * a + ( * str ++ );
a *= b;
}
return (hash & 0x7FFFFFFF );
} 现在要转成VB的,写成这样:' RS ¹þÏ£º¯Êý
Private Function Hash_RS(strText As String) As String
Dim lngB As Long
Dim lngA As Long
Dim lngHash As Long
Dim bytArr() As Byte
Dim lngLen As Long
Dim i As Long
Dim strTmp As Byte
lngB = 378551#
lngA = 63689#
lngHash = 0
bytArr = StrConv(strText, vbFromUnicode)
lngLen = UBound(bytArr)
For i = 0 To lngLen
lngHash = lngHash * lngA + bytArr(i)
lngA = lngA * lngB '****
Next
lngHash = lngHash And &H7FFFFFFF
Hash_RS = lngHash
End Function结果在***这句无法运行,两个数相乘已经超过了long。
unsigned int RSHash( char * str)
{
unsigned int b = 378551 ;
unsigned int a = 63689 ;
unsigned int hash = 0 ; while ( * str)
{
hash = hash * a + ( * str ++ );
a *= b;
}
return (hash & 0x7FFFFFFF );
} 现在要转成VB的,写成这样:' RS ¹þÏ£º¯Êý
Private Function Hash_RS(strText As String) As String
Dim lngB As Long
Dim lngA As Long
Dim lngHash As Long
Dim bytArr() As Byte
Dim lngLen As Long
Dim i As Long
Dim strTmp As Byte
lngB = 378551#
lngA = 63689#
lngHash = 0
bytArr = StrConv(strText, vbFromUnicode)
lngLen = UBound(bytArr)
For i = 0 To lngLen
lngHash = lngHash * lngA + bytArr(i)
lngA = lngA * lngB '****
Next
lngHash = lngHash And &H7FFFFFFF
Hash_RS = lngHash
End Function结果在***这句无法运行,两个数相乘已经超过了long。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货