delphi汉字与十六进制内码互转
在Delphi中新建一个项目,在窗体上放置三个EDIT,分别起名为EDIT1,EDIT2,EDIT3
EDIT1用于输入字符串;
EDIT2用于输入字符内码,同时用于显示EDIT1中的字符串内码.
EDIT3用于显示EDIT2中字符串内码对应的字符串.
两个按钮:
button1:字符串转内码
button2:内码转字符串
将下面的代码替换unit1中的内容,编译即可.
函数声明:
function stringtohex(str:string):string;//字符串转十六进制内码
function hextostring(str:string):string; //十六进制内码转字符串
function hextoint(hex:string):integer;// 十六进制字符转整数
https://p-blog.csdn.net/images/p_blog_csdn_net/oldguncm/EntryImages/20080828/Snap14.jpg
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
// procedure Edit2Change(Sender: TObject);
private
{ Private declarations }
edithex:string;
function stringtohex(str:string):string;
function hextostring(str:string):string;
function hextoint(hex:string):integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
function TForm1.stringtohex(str: string): string;
var
i:integer;
s:string;
begin
s:='';
for i:=1 to length(str) do begin
s:=s+inttohex(Integer(str[i]),2);
end;
result:=s;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text:=stringtohex(Edit1.Text );
end;
function TForm1.hextostring(str: string): string;
var
s,t:string;
i,j:integer;
p:pchar;
begin
s:='';
i:=1;
while i< length(str) do begin
t:=str[i]+str[i+1];
s:=s+chr(hextoint(t));
i:=i+2;
end;
result:=s;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit3.text:=hextostring(edit2.Text );
end;
function TForm1.hextoint(hex: string): integer;
Var
i: integer;
Function Ncf(num, f: integer): integer;
Var
i: integer;
Begin
result := 1;
If f = 0 Then exit;
For i := 1 To f Do
result := result * num;
End;
Function HexCharToInt(HexToken: char): Integer;
Begin
If HexToken > #97 Then
HexToken := Chr(Ord(HexToken) - 32);
{ use lowercase aswell }
Result := 0;
If (HexToken > #47) And (HexToken < #58) Then { chars 0....9 }
Result := Ord(HexToken) - 48
Else If (HexToken > #64) And (HexToken < #71) Then { chars A....F }
Result := Ord(HexToken) - 65 + 10;
End;
Begin
result := 0;
hex := ansiuppercase(trim(hex));
If hex = '' Then
exit;
For i := 1 To length(hex) Do
result := result + HexCharToInt(hex[i]) * ncf(16, length(hex) - i);
end;
{procedure TForm1.Edit2Change(Sender: TObject);
var
reg: TPerlRegEx;
begin
reg:=TPerlRegEx.Create(nil);
reg.Subject:=Edit2.Text;
reg.regex:='[0-9A-Fa-f]';
if reg.Match() then edithex:=edit2.Text
else edit2.Text:=edithex;
end;
}
end.