10进制与16进制之间的转换 delphi

delphi中有直接把10进制转换成16进制的函数:

  function   IntToHex(Value:   Integer;   Digits:   Integer):   string;   overload;  
  function   IntToHex(Value:   Int64;   Digits:   Integer):   string;   overload;

使用方法为:

procedure   TForm1.Button1Click(Sender:   TObject);  
var  
      i,m:   Integer;   
begin   
   Label1.Caption   :=   '';   
   for   i   :=   to  Length(Edit1.Text)  do   
   begin

      m :=  StrToInt(Edit1.Text[i]));     
      edit2 := IntToHex(StrToInt(Edit1.Text[i]),2)+ '';   
      edit3 := IntToHex(m,2);        

   end;   
end;

 

然而,delphi中却没有把16进制直接转换成10进制的函数,将16进制转换成10进制需要自己定义函数,这是自己编写的一个,不当之处还请指出:

unit Unit1;
{
    16进制与10进制的相互转换
}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);


  private
    function  HexToInt(str:string):word;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

 

procedure TForm1.FormCreate(Sender: TObject);
begin
    edit1.Clear;
    edit2.Clear;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
   str : string;
begin
    if edit1.Text<>'' then
      if edit2.Text<>'' then
      begin
        messageBox(handle,'只能输入一个数字,请重新输入','警告',MB_ok);
        edit1.Clear;
        edit2.Clear;
      end
      else
      begin
        edit2.Text:= IntToHex(strtoint(edit1.Text),4);
      end
    else
      if edit2.text='' then
      begin
        messageBox(Handle,'请输入数字','警告!',MB_ok);
      end
      else
      begin
        str := edit2.Text ;
        edit1.Text := IntToStr(HexToInt(str));
      end;
end;


function TForm1.HexToInt (str:string) : word;
var
   i , value : word;
   pos : word;

begin
   value:=0;
   pos:=length(str);
   for i:=1 to pos  do
   begin
      case str[i] of
      'f','F':
              value := value*16+15;
      'e','E':
              value := value*16+14;
      'd','D':
              value := value*16+13;
      'c','C':
              value := value*16+12;
      'b','B':
              value := value*16+11;
      'a','A':
              value := value*16+10;
      '0'..'9':
              value := value*16+ord(str[i])-ord('0');
      else
         result:=value;
         exit;
      end;
   result:=value;
  end;
 
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
    Application.Terminate;
    close;
end;

end.

posted @ 2011-12-22 11:18  马儿快跑  阅读(22215)  评论(1编辑  收藏  举报