unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,StrUtils; type TForm1 = class(TForm) grp1: TGroupBox; edt1: TEdit; Button1: TButton; edt2: TEdit; grp2: TGroupBox; edt3: TEdit; Button2: TButton; edt4: TEdit; Button5: TButton; grp3: TGroupBox; edt5: TEdit; Button3: TButton; edt6: TEdit; grp4: TGroupBox; edt7: TEdit; Button4: TButton; edt8: TEdit; grp5: TGroupBox; edt9: TEdit; Button6: TButton; edt10: TEdit; grp6: TGroupBox; edt11: TEdit; Button7: TButton; edt12: TEdit; grp7: TGroupBox; edt13: TEdit; Button8: TButton; edt14: TEdit; grp8: TGroupBox; edt15: TEdit; Button9: TButton; edt16: TEdit; procedure Button1Clik(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //------------------------------------------------------------------------- function HexToInt(const S: String): DWORD; //十六进制转十进制 asm PUSH EBX PUSH ESI MOV ESI, EAX //字符串地址 MOV EDX, [EAX-4] //读取字符串长度 XOR EAX, EAX //初始化返回值 XOR ECX, ECX //临时变量 TEST ESI, ESI //判断是否为空指针 JZ @@2 TEST EDX, EDX //判断字符串是否为空 JLE @@2 MOV BL, $20 @@0: MOV CL, [ESI] INC ESI OR CL, BL //如果有字母则被转换为小写字母 SUB CL, '0' JB @@2 // < '0' 的字符 CMP CL, $09 JBE @@1 // '0'..'9' 的字符 SUB CL, 'a'-'0'-10 CMP CL, $0A JB @@2 // < 'a' 的字符 CMP CL, $0F JA @@2 // > 'f' 的字符 @@1: // '0'..'9', 'A'..'F', 'a'..'f' SHL EAX, 4 OR EAX, ECX DEC EDX JNZ @@0 JMP @@3 @@2: XOR EAX, EAX // 非法16进制字符串 @@3: POP ESI POP EBX RET end; //------------------------------------------------------------------------- Function HexToDec(const Value :string ) : string; //十六进制转十进制 var s : string; begin //如果Value前没有$符号,则加上#36,否则不用加 s := #36 + Value; Result := IntToStr(StrToInt(s)); end; //------------------------------------------------------------------------- function mod_num(n1,n2:integer):integer;//取余数 //十进制转化二进制 begin result:=n1-n1 div n2*n2 end; function reverse(s:String):String;//取反串 Var i,num:Integer; st:String; begin num:=Length(s); st:=''; For i:=num DownTo 1 do Begin st:=st+s[i]; End; Result:=st; end; //------------------------------------------------------------------------- Function DecTobin(Value :Integer) : string;//十进制转化二进制 var ST:String; N:Integer; Begin ST:=''; n:=value; While n>=2 Do Begin ST:=ST+IntToStr(mod_num(n,2)); n:=n div 2; End; ST:=ST+IntToStr(n); Result:=reverse(st); End; //------------------------------------------------------------------------- Function binToDec(Value :string) : integer;//二进制转化十进制 var str : String; Int : Integer; i : integer; BEGIN Str := UpperCase(Value); Int := 0; FOR i := 1 to Length(str) do Int := Int * 2+ ORD(str[i]) - 48; Result :=Int; end; //------------------------------------------------------------------------- function BinToHexEachOther(ValueA : string; Action : Boolean) : string; //把二进制串转换成十六进制串或相反 var ValueArray1 : Array [0..15] of string[4]; ValueArray2 : Array [0..15] of char; i : shortint; begin //数组初始化 ValueArray1[0] := '0000'; ValueArray1[1] := '0001'; ValueArray1[2] := '0010'; ValueArray1[3] := '0011'; ValueArray1[4] := '0100'; ValueArray1[5] := '0101'; ValueArray1[6] := '0110'; ValueArray1[7] := '0111'; ValueArray1[8] := '1000'; ValueArray1[9] := '1001'; ValueArray1[10] := '1010'; ValueArray1[11] := '1011'; ValueArray1[12] := '1100'; ValueArray1[13] := '1101'; ValueArray1[14] := '1110'; ValueArray1[15] := '1111'; for i := 0 to 15 do if i >= 10 then ValueArray2[i] := chr(65 + (i - 10)) else ValueArray2[i] := inttostr(i)[1]; Result := ''; if Action then begin //二进制串转换成十六进制串 if (Length(ValueA) MOD 4 <> 0) then ValueA := stringofchar('0',Length(ValueA) MOD 4) + ValueA; while (Length(ValueA) >= 4) do begin for i := 0 to 15 do if Copy(ValueA,1,4) = ValueArray1[i] then Result := Result + ValueArray2[i]; ValueA := Copy(ValueA,5,Length(ValueA) - 4); end; end else begin //十六进制串转换成二进制串 while (Length(ValueA) >= 1) do begin for i := 0 to 15 do if Copy(ValueA,1,1) = ValueArray2[i] then Result := Result + ValueArray1[i]; ValueA := Copy(ValueA,2,Length(ValueA) - 1); end; end; end; function HexCharToInt(HexToken : char):Integer; begin 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; Function ConvertBinToStr(Value : string):string; //把二进制数据转化为字符串 var tempHex : string; i, tempInt : integer; begin Result := ''; if trim(Value) = '' then Exit; tempHex := BinToHexEachOther(Value,true);//二进制转成十六进制 i := 0; Repeat begin i := i + 1; tempInt := HexCharToInt(tempHex[i]); i := i + 1; tempInt := tempInt * 16 + HexCharToInt(tempHex[i]); //以上将两位十六进制数转变为一个十进制数 Result := Result + chr(TempInt); //转成ASCII码 end; Until i >= length(tempHex) end; //------------------------------------------------------------------------- Function CharToDec(Value: string):string; //字符转化十进制 var i: integer; chk:integer; begin chk:=0; for i:=0 to length(Value) do chk:=chk + ord(Value[i]); CharToDec:=IntToStr(chk) ; end; //------------------------------------------------------------------------- function HexStrToStr(const S: string): string; //16进制字符串转换成字符串 var t: Integer; ts: string; M, Code: Integer; begin t := 1; Result := ''; while t <= Length(S) do begin while not (S[t] in ['0'..'9', 'A'..'F', 'a'..'f']) do inc(t); if (t + 1 > Length(S)) or (not (S[t + 1] in ['0'..'9', 'A'..'F', 'a'..'f'])) then ts := '$' + S[t] else ts := '$' + S[t] + S[t + 1]; Val(ts, M, Code); if Code = 0 then Result := Result + Chr(M); inc(t, 2); end; end; //------------------------------------------------------------------------- function strToHexStr(str:string):string; //字符串转换成16进制字符串 var c:char; ss:string; begin while str<>'' do begin c:=str[1]; ss:=ss+format('%0x',[ord(c)]); delete(str,1,1); end; strtohexStr:= ss; end; //------------------------------------------------------------------------- procedure TForm1.Button1Clik(Sender: TObject); begin edt2.Text:= IntToHex(StrToInt(edt1.Text),2); end; procedure TForm1.Button2Click(Sender: TObject); var a:Integer; begin A:=HexToInt(edt3.Text); edt4.Text:=IntToStr(A); end; procedure TForm1.Button5Click(Sender: TObject); begin edt4.Text:=HexToDec(edt3.Text); end; procedure TForm1.Button3Click(Sender: TObject); begin edt6.Text:=DecTobin(StrToInt(edt5.Text)) end; procedure TForm1.Button4Click(Sender: TObject); begin edt8.Text:=IntToStr(BinToDec(edt7.Text)) ; end; procedure TForm1.Button6Click(Sender: TObject); begin edt10.Text:=CharToDec(edt9.Text); end; procedure TForm1.Button7Click(Sender: TObject); begin edt12.Text:=HexStrToStr(edt11.Text); end; procedure TForm1.Button8Click(Sender: TObject); begin edt14.Text:=strToHexStr(edt13.Text); end; procedure TForm1.Button9Click(Sender: TObject); begin edt16.Text:= ConvertBinToStr(edt15.Text); end; end.