Delphi:两个高效的哈希函数

本文提供了BKDRHash和DJBHash两种哈希函数的汇编语言实现,并附带了对应的Pascal语言版本代码。BKDRHash通过循环累加字符值并乘以131来计算哈希值;而DJBHash则采用位移和加法操作逐步更新哈希值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function BKDRHash(buf: Pointer; count: Integer) : Cardinal; assembler; asm PUSH EBX; XOR EBX, EBX MOV ECX, EAX XOR EAX, EAX @LOOP: TEST EDX, EDX JZ @EXIT MOV BL, [ECX] IMUL EAX, 131 ADD EAX, EBX INC ECX DEC EDX JMP @LOOP @EXIT: POP EBX //---------------------------- // Pascal: // // Result := 0; // while count > 0 do // begin // Result := (Result * 131) + PByte(buf)^; // Inc(PByte(buf)); // Dec(count); // end; end; function DJBHash(buf: Pointer; count: Integer) : Cardinal; assembler; asm PUSH EDI PUSH EBX XOR EBX, EBX MOV ECX, EAX MOV EAX, 5381 @LOOP: TEST EDX, EDX JZ @EXIT MOV EDI, EAX SHL EDI, 5 ADD EAX, EDI MOV BL, [ECX] ADD EAX, EBX INC ECX DEC EDX JMP @LOOP @EXIT: POP EBX POP EDI //---------------------------- // Pascal: // // Result := 5381; // while count > 0 do // begin // Result := ((Result shl 5) + Result) + PByte(buf)^; // Inc(PByte(buf)); // Dec(count); // end; end;

各种哈希函数算法请参考:

http://www.partow.net/programming/hashfunctions/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值