Konversi umum di bawah Delphi
Pengarang:lyboy99
email:[email protected]
url: http://hnh.126.com
Memberi Anda beberapa metode konversi yang umum digunakan dan fungsi konversinya
Semoga ini bisa membantu Anda
1.HEX -> Bilangan Bulat
2.2.Des Ke HEX
3.ASCII ke HEX/matematika
4.Biner ke desimal
==================== ============
1.HEX -> Bilangan Bulat
==================== ============
Metode.1
--------------------------------------------------- -----------------------------------
var
saya : bilangan bulat
s : tali;
mulai
s := '$' + ItuHexString;
saya := StrToInt(a);
akhir;
--------------------------------------------------- -----------------------------------
Metode.2
--------------------------------------------------- -----------------------------------
CONST HEX : ARRAY['A'..'F'] DARI INTEGER = (10,11,12,13,14,15);
str VAR : Tali;
ke dalam,
saya : bilangan bulat;
MULAI
BACALN(str);
Ke dalam := 0;
UNTUK i := 1 TO Panjang(str) DO
JIKA str[i] < 'A' MAKA Int := Int * 16 + ORD(str[i]) - 48
LAIN Int := Int * 16 + HEX[str[i]];
TERTULIS(Int);
BACA;
AKHIR.
==================== =
2.Des Ke HEX
-----------------------------------------------
HexString := Format('%0x',NilaiDesember);
-----------------------------------------------
==================== ==
3.ASCII ke HEX/matematika
--------------------------
satuan Hexstr;
antarmuka
menggunakan String16, SysUtils;
Jenis
PByte = ^BYTE;
Prosedur BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: Word);
prosedur HexStrToBytes(hHexStr: String; pbyteArray: Pointer);
procedure HexBytesToChar(var Response: String; hexbytes: PChar; InputLength: WORD);
pelaksanaan
procedure BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: WORD);
Konstan
HexChars : Array[0..15] dari Char = '0123456789ABCDEF';
var
saya, j: KATA;
mulai
SetLength(hHexStr, (Panjang Masukan * 2));
FillChar(hHexStr, ukuran(hHexStr), #0);
j := 1;
untuk i := 1 hingga InputLength dimulai
hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
hHexStr[j] := Char(HexChars[pbyteArray^ dan 15]);
inc(pbyteArray);
akhir;
akhir;
procedure HexBytesToChar(var Response: String; hexbytes: PChar; InputLength: WORD);
var
saya: KATA;
c: byte;
mulai
SetLength(Respon, Panjang Input);
FillChar(Respon, SizeOf(Respon), #0);
untuk i := 0 hingga (InputLength - 1) dimulai
c := BYTE(hexbytes[i]) Dan BYTE($f);
jika c > 9 maka
Inc(c, $37)
kalau tidak
Inc(c, $30);
Respon[i + 1] := char(c);
akhir;{untuk}
akhir;
prosedur HexStrToBytes(hHexStr: String; pbyteArray: Pointer);
{pbyteArray harus menunjuk ke memori yang cukup untuk menampung keluaran}
var
saya, j: KATA;
tempPPTr: PChar;
duaDigit: String[2];
mulai
tempPtr := pbyteArray;
j := 1;
untuk i := 1 hingga (Panjang(hHexStr) DIV 2) dimulai
duaDigit := Salin(hHexStr, j, 2);
PByte(tempPtr)^ := StrToInt('$' + duaDigit Inc(tempPtr);
akhir;{untuk}
akhir;
akhir.
--------------------------------------------------- -----------------------------------
--------------------------------------------------- -----------------------------------
Rangkaian UNIT16.
antarmuka
{$IFNDEF Menang32}
prosedur SetLength(var S: string; Len: Integer);
prosedur SetString(var Dst: string; Src: PChar; Len: Integer);
{$ENDIF}
pelaksanaan
{$IFNDEF Menang32}
prosedur SetLength(var S: string; Len: Integer);
mulai
jika Len > 255 maka
S[0] := Bab(255)
kalau tidak
S[0] := Chr(Len)
akhir;
prosedur SetString(var Dst: string; Src: PChar; Len: Integer);
mulai
jika Len > 255 maka
Pindah(Src^, Dst[1], 255)
kalau tidak
Pindah(Src^, Dst[1], Len);
SetLength(Dst, Len);
akhir;
{$ENDIF}
akhir.
==================== ===============
4.Biner ke desimal
--------------------------------------------------- ---------------
//////////////////////////////////////////////////// /
// mengubah 32 bit base2 menjadi 32 bit base10 //
// angka maks = 99 999 999, kembalikan -1 jika lebih //
//////////////////////////////////////////////////// /
fungsi Base10(Base2:Integer): Integer;
asm
cmp eax,100000000 // periksa batas atas
jb @1 // oke
mov eax,-1 // tanda kesalahan
jmp @exit // keluar dengan -1
@1:
push ebx // simpan register
dorong esi
xor esi,esi // hasil = 0
mov ebx,10 // basis pengalih 10
mov ecx,8 // 8 camilan (10^8-1)
@2:
mov edx,0 // hapus sisa
div ebx // eax DIV 10, edx mod 10
tambahkan esi,edx // hasil = hasil + sisa[I]
ror esi,4 // geser gigitan
loop@2 // loop untuk 8 camilan
mov eax,esi // hasil fungsi
pop esi // pulihkan register
pop ebx
@KELUAR:
akhir;
--------------------------------------------------- -----------------------------------
Metode.2
[Oliver Townshend, [email protected]]
--------------------------------------------------- -----------------------------------
fungsi IntToBin(Nilai: LongInt;Ukuran: Integer): String;
var
saya: Bilangan bulat;
mulai
Hasil:=';
for i:=Ukuran turun ke 0 dimulai
jika Nilai dan (1 shl i)<>0 maka mulailah
Hasil:=Hasil+'1';
akhiri yang lain mulai
Hasil:=Hasil+'0';
akhir;
akhir;
akhir;
fungsi BinToInt(Nilai: String): LongInt;
var
saya,Ukuran: Integer;
mulai
Hasil:=0;
Ukuran:= Panjang (Nilai);
for i:=Ukuran turun ke 0 dimulai
jika Copy(Value,i,1)='1' maka mulailah
Hasil:=Hasil+(1 shl i);
akhir;
akhir;
akhir;
==================== ==========