Delphi版的Base64转换函数(修改版)

     前几天,兴趣所致,写了2个Delphi版的Base64转换函数,见《Delphi版的Base64转换函数》一文。后来觉得这些函数使用不够灵活,所以重新写了几个放在这里,核心的转换代码用BASM写的(不知是否快一点,不过,我觉得用汇编写这种代码好像比Pascal还容易些,因为有些二进制操作,高级语言不方便,同时使用汇编也能使算法更合理,可比较《Delphi版的Base64转换函数》代码和汇编码的注释伪代码),如果有错误和建议,请指正,本人不甚感激!

    说明:本文代码2007年7月23日重新作过一些优化修改,速度有所提高。

 

    更新(2009.9.30):为了适应Delphi2009以上版本,对代码重新作了修订,下面是用Delphi2010写的一段对文件流编码和解码的例子,例子中用来进行验证的MD5码类代码见《重新组织编写Delphi的MD2、MD4、MD5类》:

    另有一点需要说明:有不少Delphi新手对本文编码(解码)过程的无类型参数感到困惑,不知该传递什么类型。其实,Delph中有不少这类无类型参数,如常用的Move过程,只要把它当着一个Byte类型的数组看待就行了,当使用string类型作实参传递给无类型形参时,要把s[1]作为参数传递(string类型下标是从1开始的),或者用指针转换,如PChar(s)^。如果是Delphi2009及以上版本,string类型作实参传递给无类型形参时,要注意不能简单的将Length(s)传递给SourceSize,而应该是Length(s) * Sizeof(char),因为Length(s)是字符串的长度,而不是实际缓冲区的长度,Delphi2009及以上版本中默认的string是WideString,char也等于WideChar,每个char占2字节。当然用string类型传递给无类型参数计算的是Unicode字符串的Base64编码,只有用AnsiString类型传递给无类型参数,或者使用StrToBase64过程(会自动转换string为AnsiString),才可能是你需要的Base64编码.

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 35
    评论
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值