delphi汉字与十六进制内码互转

来源:互联网 发布:ceva 编程语言 编辑:程序博客网 时间:2024/05/09 01:00

delphi汉字与十六进制内码互转

Delphi中新建一个项目,在窗体上放置三个EDIT,分别起名为EDIT1EDIT2EDIT3

EDIT1用于输入字符串;

EDIT2用于输入字符内码,同时用于显示EDIT1中的字符串内码.

EDIT3用于显示EDIT2中字符串内码对应的字符串.

两个按钮:

button1:字符串转内码

button2:内码转字符串

将下面的代码替换unit1中的内容,编译即可.

函数声明:

function stringtohex(str:string):string;//字符串转十六进制内码

    function hextostring(str:string):string; //十六进制内码转字符串

    function hextoint(hex:string):integer;// 十六进制字符转整数

 

http://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.

原创粉丝点击