原来IntToHex是这么实现的。。。

看delphi自带的源码是如此:

function IntToHex(Value: Integer; Digits: Integer): string;
//  FmtStr(Result, '%.*x', [Digits, Value]);
asm
        CMP     EDX, 32        //为什么是edx呢?因为delphi函数的顺序是eax,edx,ecx,超过3个就push,所以  edx=digits.
        JBE     @A1              //digits小于等于32,跳到@A1
        XOR     EDX, EDX   //大于32就 digits := 0;
@A1:    PUSH    ESI       //保存esi
        MOV     ESI, ESP     //esp是栈顶指针。
        SUB     ESP, 32      //分配8个局部变量(32 div 4 = 8)
        PUSH    ECX            //返回值得指针
        MOV     ECX, 16        //   CvtInt的参数,0表示signed decimal, 10 or 16 表示unsigned      
        CALL    CvtInt          //delphi自己定义的一个函数,在SysUtils单元
        MOV     EDX, ESI   //esi是一个指向转换后文本的开始地址的指针
        POP     EAX            // result ptr
        CALL    System.@LStrFromPCharLen     pchar to Str的转换
        ADD     ESP, 32     //清除局部变量
        POP     ESI           
end;

而分析一个可执行程序却发现,原来可以这样:

c_HexStr='0123456789ABCDEF';

function TForm2.ByteToChr(b: byte): char;
begin
  result := c_hexstr[b+1];
end;

其实生成随机密码也可以用这个原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值