DWORD GetRolHash(char lpszBuffer)
{
DWORD dwHash = 0;
while(lpszBuffer)
{
dwHash = ( (dwHash <<25 ) | (dwHash>>7) );
dwHash = dwHash+*lpszBuffer;
lpszBuffer++;
}
return dwHash;
}
某项工作中使用到计算hash值,于是想使用易语言写一个工具,
但是易语言一直很诡异,计算不出正确值.导致原因可能由于易语言中没有DWORD类型,并且整数四则运算是当作双精度浮点数来计算,搞得很纠结.
无奈写了个置入汇编版的,经过测试,完美无bug
.版本 2
.支持库 spec
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
' 多次计算为了测试否是堆栈有问题
.计次循环首 (11, )
调试输出 (GetRolHash (“”))
.计次循环尾 ()
返回 (0) ' 可以根据您的需要返回任意数值
.子程序 GetRolHash, 文本型
.参数 string, 文本型
.局部变量 nHash, 整数型
nHash = GetRolHash0 (取变量数据地址 (string))
返回 (“0x” + 取十六进制文本 (nHash))
.子程序 GetRolHash0, 整数型
.参数 string, 整数型
置入代码 ({ 137, 236, 93, 139, 84, 36, 4, 51, 201, 235, 9, 193, 201, 7, 15, 190, 192, 3, 200, 66, 138, 2, 132, 192, 117, 241, 139, 193, 195 })
返回 (0)