如何利用Delphi 2010将Unicode字符串转换成十六进制表示并返回结果?
- 内容介绍
- 文章标签
- 相关推荐
本文共计691个文字,预计阅读时间需要3分钟。
在Delphi 2010中,要将字符串转换为十六进制字符串,然后将其转换回原始的Unicode字符串,可以按照以下步骤操作:
1. 使用`AnsiToUtf8`函数将字符串从Ansi编码转换为UTF-8编码。
2.将UTF-8编码的字符串转换为十六进制字符串。
3.将十六进制字符串转换回UTF-8编码的字符串。
4.使用`Utf8ToString`函数将UTF-8编码的字符串转换回原始的Unicode字符串。
以下是一个简化的示例代码:
delphi
program HexConversion;uses SysUtils, StrUtils;
function AnsiToUtf8(const S: string): string;var Len: Integer; P: PChar;begin Result :=''; Len :=Length(S); SetLength(Result, Len * 3); P :=PChar(Result); while Length(S) > 0 do begin if S[1] in ['A'..'F', 'a'..'f', '0'..'9', '+', '/', #0] then Write(P^, S[1]) else Write(P^, Char(Round(StrToInt('$' + Copy(S, 1, 2))))); Inc(P); Delete(S, 1, 1); end; SetString(Result, PChar(Result), Length(Result) - P - 1);end;
function Utf8ToString(const Utf8Str: string): string;begin Result :=UTF8ToAnsi(Utf8Str);end;
function HexToUtf8(const HexStr: string): string;var I: Integer; CharCode: Integer; Utf8Str: string;begin Utf8Str :=''; for I :=1 to Length(HexStr) div 2 do begin CharCode :=StrToInt('$' + Copy(HexStr, (I - 1) * 2 + 1, 2)); Utf8Str :=Utf8Str + Char(CharCode); end; Result :=Utf8Str;end;
var OriginalString, HexString, ConvertedString: string;begin OriginalString :='Михаил Василиевич Мономах'; HexString :=AnsiToUtf8(OriginalString); ConvertedString :=HexToUtf8(HexString); Writeln('Original: ' + OriginalString); Writeln('Hex: ' + HexString); Writeln('Converted back: ' + ConvertedString);end.
这段代码将原始字符串转换为十六进制字符串,然后再转换回Unicode字符串,最后打印出原始字符串、十六进制字符串和转换回的字符串。
我正在使用Delphi 2010,我需要能够将字符串转换为十六进制字符串,然后才能将该十六进制字符串转换回原始的unicode字符串.例如,我的字符串是:МихаилВасильевичЛомоносов
我能够使用Warren P’s StringToHex16 snippet here(我粘贴下面的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;
使用链接的StringToHex16给我这个十六进制字符串:
041C04380445043004380301043B002004120430044104380301043B044C04350432043804470020041B043E043C043E043D043E03010441043E0432
我对这个主题有点天真,我很感激您可以提供任何帮助将此十六进制字符串转换回原始输入.
链接函数为输入字符串中的每个字符生成四个十六进制数字,因此您的反函数需要使用四个字符的块并将它们转换为一个.函数使用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;
此函数假定输入是由StringToHex16或类似的东西生成的.如果它不包含四个十六进制数字的倍数,则行为未定义.
本文共计691个文字,预计阅读时间需要3分钟。
在Delphi 2010中,要将字符串转换为十六进制字符串,然后将其转换回原始的Unicode字符串,可以按照以下步骤操作:
1. 使用`AnsiToUtf8`函数将字符串从Ansi编码转换为UTF-8编码。
2.将UTF-8编码的字符串转换为十六进制字符串。
3.将十六进制字符串转换回UTF-8编码的字符串。
4.使用`Utf8ToString`函数将UTF-8编码的字符串转换回原始的Unicode字符串。
以下是一个简化的示例代码:
delphi
program HexConversion;uses SysUtils, StrUtils;
function AnsiToUtf8(const S: string): string;var Len: Integer; P: PChar;begin Result :=''; Len :=Length(S); SetLength(Result, Len * 3); P :=PChar(Result); while Length(S) > 0 do begin if S[1] in ['A'..'F', 'a'..'f', '0'..'9', '+', '/', #0] then Write(P^, S[1]) else Write(P^, Char(Round(StrToInt('$' + Copy(S, 1, 2))))); Inc(P); Delete(S, 1, 1); end; SetString(Result, PChar(Result), Length(Result) - P - 1);end;
function Utf8ToString(const Utf8Str: string): string;begin Result :=UTF8ToAnsi(Utf8Str);end;
function HexToUtf8(const HexStr: string): string;var I: Integer; CharCode: Integer; Utf8Str: string;begin Utf8Str :=''; for I :=1 to Length(HexStr) div 2 do begin CharCode :=StrToInt('$' + Copy(HexStr, (I - 1) * 2 + 1, 2)); Utf8Str :=Utf8Str + Char(CharCode); end; Result :=Utf8Str;end;
var OriginalString, HexString, ConvertedString: string;begin OriginalString :='Михаил Василиевич Мономах'; HexString :=AnsiToUtf8(OriginalString); ConvertedString :=HexToUtf8(HexString); Writeln('Original: ' + OriginalString); Writeln('Hex: ' + HexString); Writeln('Converted back: ' + ConvertedString);end.
这段代码将原始字符串转换为十六进制字符串,然后再转换回Unicode字符串,最后打印出原始字符串、十六进制字符串和转换回的字符串。
我正在使用Delphi 2010,我需要能够将字符串转换为十六进制字符串,然后才能将该十六进制字符串转换回原始的unicode字符串.例如,我的字符串是:МихаилВасильевичЛомоносов
我能够使用Warren P’s StringToHex16 snippet here(我粘贴下面的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;
使用链接的StringToHex16给我这个十六进制字符串:
041C04380445043004380301043B002004120430044104380301043B044C04350432043804470020041B043E043C043E043D043E03010441043E0432
我对这个主题有点天真,我很感激您可以提供任何帮助将此十六进制字符串转换回原始输入.
链接函数为输入字符串中的每个字符生成四个十六进制数字,因此您的反函数需要使用四个字符的块并将它们转换为一个.函数使用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;
此函数假定输入是由StringToHex16或类似的东西生成的.如果它不包含四个十六进制数字的倍数,则行为未定义.

