Delphi自带的IntToHex速度慢效率优化一例

加密后的数据转换为字符串,一般可以用base64编码,也可以转换为16进制的字符显示。转换后的体积base64编码的会比16进制字符串更小一些。


由于原先系统是用的16进制字符,为兼容考虑所以继续用16进制字符。在数据量小的时候没问题,加密解密都很快。

代码如下
function StrToHex(Value: RawByteString): ansistring;
var
  I: Integer;
begin
  Result := '';
  for I := 1 to Length(Value) do
    Result := Result + IntToHex(Ord(Value[I]), 2); //速度慢

end;

不过字符数量达到3万,加密后转为16进制字符耗时需要10多秒。跟踪调试发现是Delphi系统自带的IntToHex效率低引起卡顿的。

由于本系统只需简单的将单个字节转为16进制字符,不需考虑integer或者int64数据类型。所以决定用空间换时间,用查表法提高效率。

const
hexTable: array [0..255] of ShortString = (
    '00', '01','02', '03', '04', '05', '06', '07', '08','09','0A','0B','0C','0D','0E','0F',
    '10', '11','12', '13', '14', '15', '16', '17', '18','19','1A','1B','1C','1D','1E','1F',
    '20', '21','22', '23', '24', '25', '26', '27', '28','29','2A','2B','2C','2D','2E','2F',
    '30', '31','32', '33', '34', '35', '36', '37', '38','39','3A','3B','3C','3D','3E','3F',
    '40', '41','42', '43', '44', '45', '46', '47', '48','49','4A','4B','4C','4D','4E','4F',
    '50', '51','52', '53', '54', '55', '56', '57', '58','59','5A','5B','5C','5D','5E','5F',
    '60', '61','62', '63', '64', '65', '66', '67', '68','69','6A','6B','6C','6D','6E','6F',
    '70', '71','72', '73', '74', '75', '76', '77', '78','79','7A','7B','7C','7D','7E','7F',
    '80', '81','82', '83', '84', '85', '86', '87', '88','89','8A','8B','8C','8D','8E','8F',
    '90', '91','92', '93', '94', '95', '96', '97', '98','99','9A','9B','9C','9D','9E','9F',
    'A0', 'A1','A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8','A9','AA','AB','AC','AD','AE','AF',
    'B0', 'B1','B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8','B9','BA','BB','BC','BD','BE','BF',
    'C0', 'C1','C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8','C9','CA','CB','CC','CD','CE','CF',
    'D0', 'D1','D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8','D9','DA','DB','DC','DD','DE','DF',
    'E0', 'E1','E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8','E9','EA','EB','EC','ED','EE','EF',
    'F0', 'F1','F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8','F9','FA','FB','FC','FD','FE','FF'
  );

然后将最后一句代码改为
Result := Result + hexTable[Ord(Value[I])];

经测试,加密后的转换效率大幅提高。耗时从原先的十多秒优化到0.001秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值