DELPHI 字符转16进制、16进制转字符,Ansi与Unicode编码互转

function TForm1.myStrToHex(s:string):string; //字串转16进制
var
    TmpStr:string;
    i:integer;
begin
    TmpStr:='';
    for i:=1 to Length(s)do
    begin
        TmpStr:=TmpStr+IntToHex(ord(s[i]),2);
    end;
    Result:=TmpStr;
end;

 

function TForm1.myHexToStr(s:string):string; //16进制转字串
var
    HexS,TmpStr:string;
    i:Integer;
    a:Byte;
begin
    HexS:=s;
    if Length(HexS) mod 2=1 then
    begin
        HexS:=HexS+'0';
    end;
    TmpStr:='';
    for i:=1 to(Length(HexS)div 2)do
    begin
        a:=StrToInt('$'+HexS[2*i-1]+HexS[2*i]);
        TmpStr:=TmpStr+Chr(a);
    end;
    Result:=TmpStr;
end;

前段时间用D7开发到调用XE5的开发的动态库,然后在网上找到这2个转码函数,D7亲测可用,只是时间过去了,忘记从哪转载的了,在此表示对原创者抱歉了。

纪念以备不时之需,不过低版本Ansi编码传参到高版本unicode编码,参数定义为widestring,好像不必转码。只是我人懒,懒得试了。

function AnsiToUnicode(Str: String): WideString;
  var
    LWideChar: PWideChar;
    Len: Integer;
  begin
    Len := (Length(Str) + 1) * 2;
    GetMem(LWideChar, Len);
    ZeroMemory(LWideChar, Len);
 
    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, PChar(Str), Length(Str), LWideChar, Len);
    Result := LWideChar;
    FreeMem(LWideChar);
  end;

function UnicodeToAnsi(s:WideString):string;
  var
    lpChar:PChar;
    len:integer;
    begin
    len := Length(s) * 2;
    GetMem(lpChar,len);
    ZeroMemory(lpChar, len);
    WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, PWideChar(s),
    Length(s),lpChar,Len, nil, nil );
 
    Result := lpChar;
    FreeMem(lpChar);
  end;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值