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;