我使用德尔福2010年和我有一个需要能够将字符串转换为十六进制字符串,再后来能到十六进制字符串转换回原来的unicode字符串.
例如,我的字符串是:МихаилВасильевичЛомоносов
我能够在这里使用Warren P的StringToHex16片段(我在下面粘贴了Warren的片段)将字符串转换为十六进制字符串,但我不知道如何将该十六进制字符串转换回原始的unicode字符串.
function StringToHex16(str: string): string;
var
i:integer;
s:string;
begin
s:='';
for i:=1 to length(str) do begin
s:=s+inttohex(Integer(str[i]),4);
end;
result:=s;
end;
Run Code Online (Sandbox Code Playgroud)
使用链接的StringToHex16给我这个十六进制字符串:
041C04380445043004380301043B002004120430044104380301043B044C04350432043804470020041B043E043C043E043D043E03010441043E0432
Run Code Online (Sandbox Code Playgroud)
我对这个主题有点天真,我很感激您可以提供任何帮助将此十六进制字符串转换回原始输入.
链接函数为输入字符串中的每个字符生成四个十六进制数字,因此您的反函数需要使用四个字符的块并将它们转换为一个.用于IntToHex
将输入字符串的数字字符代码转换为输出字符的函数,以及与十六进制前缀相反的IntToHex
函数StrToInt
,所以让我们使用它.
function HexToString16(const str: string): string;
var
i: Integer;
code: string;
begin
Result := '';
i := 1;
while i < Length(str) do begin
code := Copy(str, i, 4);
Result := Result + Chr(StrToInt('$' + code));
Inc(i, 4);
end;
end;
Run Code Online (Sandbox Code Playgroud)
此函数假定输入是由StringToHex16
等价物生成的.如果它不包含四个十六进制数字的倍数,则行为未定义.