1:利用String 类型“可以实现”汉字与16进制的相互转化
Function TForm1.MyStrToHex(Str:String):String;
var
i:Integer;
begin
for i:=1 to Length(Str) do
Result:=Result+IntToHex(Ord(Str[i]),2);
end;Function TForm1.MyHexToStr(Hex:String):String;
var
i:Integer;
begin
for i:=1 to Length(Hex) div 2 do
Result:=Result+Chr(StrToInt('$'+Hex[2*i-1]+Hex[2*i]));
end;2:利用WideString 类型“无法实现”汉字与16进制的相互转化
Function TForm1.MyStrToHex(Str:WideString):WideString;
var
i:Integer;
begin
for i:=1 to Length(Str) do
Result:=Result+IntToHex(Ord(Str[i]),2);
end;
Function TForm1.MyHexToStr(Hex:WideString):WideString;
var
i:Integer;
begin
for i:=1 to Length(Hex) div 2 do
Result:=Result+Chr(StrToInt('$'+String(Hex)[2*i-1]+String(Hex)[2*i]));
end;问题:为什么???
Function TForm1.MyStrToHex(Str:String):String;
var
i:Integer;
begin
for i:=1 to Length(Str) do
Result:=Result+IntToHex(Ord(Str[i]),2);
end;Function TForm1.MyHexToStr(Hex:String):String;
var
i:Integer;
begin
for i:=1 to Length(Hex) div 2 do
Result:=Result+Chr(StrToInt('$'+Hex[2*i-1]+Hex[2*i]));
end;2:利用WideString 类型“无法实现”汉字与16进制的相互转化
Function TForm1.MyStrToHex(Str:WideString):WideString;
var
i:Integer;
begin
for i:=1 to Length(Str) do
Result:=Result+IntToHex(Ord(Str[i]),2);
end;
Function TForm1.MyHexToStr(Hex:WideString):WideString;
var
i:Integer;
begin
for i:=1 to Length(Hex) div 2 do
Result:=Result+Chr(StrToInt('$'+String(Hex)[2*i-1]+String(Hex)[2*i]));
end;问题:为什么???
Function TForm1.MyStrToHex(Str:WideString):String;
var
i:Integer;
begin
for i:=1 to Length(Str) do
Result:=Result+IntToHex(Ord(Str[i]),4);
end;
Function TForm1.MyHexToStr(Hex:String):WideString;
var
i:Integer;
begin
for i:=1 to Length(Hex) div 4 do
Result:=Result+Chr(StrToInt('$'+Hex[4*i-3]+Hex[4*i-2]+Hex[4*i-1]+Hex[4*i]));
end;
我实验一下,发现只能转化进行单字节与16进制的转化,无法进行双字节与16进制的转化
Function TForm1.MyStrToHex(Str:String):WideString;
var
i:Integer;
begin
for i:=1 to Length(Str) do
Result:=Result+IntToHex(Ord(Str[i]),0);
end;//将16进制转化为汉字串 -> 失败
Function TForm1.MyHexToStr(Hex:String):WideString;
var
i:Integer;
begin
for i:=1 to Length(Hex) div 4 do
Result:=Result+Chr(StrToInt('$'+Hex[4*i-3]+Hex[4*i-2]+Hex[4*i-1]+Hex[4*i]));
end;
Function TForm1.MyStrToHex(Str:WideString):WideString;
var
PStr:PChar;
i:Integer;
begin
GetMem(PStr,MAX_PATH);
StrPCopy(PStr,String(Str));
for i:=1 to Length(PStr) do
Result:=Result+IntToHex(Ord(String(PStr)[i]),2);
FreeMem(PStr);
end;
以上为正向转化->成功但是利用WideString类型将16进制 反向 转化为汉字还没有修改好,请各位帮忙
var
i: Integer;
sTemp: string;
begin
//“中国网管程序:操作说明”的Unicode编码16进制为:
//4E2D 56FD 7F51 7BA1 7A0B 5E8F FF1A 64CD 4F5C 8BF4 660E
for i := 1 to Length(asUnicodeHex) do
begin
if i mod 4 = 0 then
begin
sTemp := Copy(asUnicodeHex, i - 3, 4);
sTemp := WideChar(StrToIntDef('$' + sTemp, 0));
Result := Result + sTemp;
end;
end;
end;
1:利用WideString 将 汉字 正向 转化为 16进制 已经解决,
2:利用WideString 进行反向转化还是失败,以上方法均要求必须采用 WideString 才可以的呀?
2:利用WideString 进行反向转化还是失败,
要求必须采用 WideString 类型 做传入参数,传出结果也必须为 WideString 类型
Function TForm1.MyHexToStr(Hex:WideString):WideString;
var
PHex:PChar;
i:Integer;
tmp,tmp1,tmp2:WideString;
begin
GetMem(PHex,MAX_PATH);
StrPCopy(PHex,String(Hex));
for i:=1 to Length(PHex) div 2 do
Result:=Result+Chr(StrToInt('$'+String(PHex)[2*i-1]+String(PHex)[2*i]));
Result:='';
i:=1;
while i<=Length(PHex) do
begin
tmp:=Copy(String(PHex),i,1);
if tmp>='A' then
begin //双字节
tmp:=Chr(StrToInt('$'+Copy(String(PHex),i,2)))+ Chr(StrToInt('$'+Copy(String(PHex),i+2,2)));
Result:=Result+tmp;
i:=i+4;
end
else
begin
tmp:=Chr(StrToInt('$'+Copy(String(PHex),i,2)));
Result:=Result+tmp;
i:=i+2;
end;
end;
FreeMem(PHex);
end;