Gängige Konvertierungen unter Delphi
Autor:lyboy99
E-Mail:[email protected]
URL: http://hnh.126.com
Stellen Sie mehrere häufig verwendete Konvertierungsmethoden und deren Konvertierungsfunktionen bereit
Ich hoffe, es hilft dir
1.HEX -> Ganzzahl
2.2.Dez bis HEX
3. ASCII zu HEX/Mathe
4.Binär zu Dezimal
=============================================== ============
1.HEX -> Ganzzahl
=============================================== ============
Methode.1
-------------------------------------------------- ----------------------------------
var
i: ganze Zahl
s: Zeichenfolge;
beginnen
s := '$' + ThatHexString;
i := StrToInt(a);
Ende;
-------------------------------------------------- ----------------------------------
Methode.2
-------------------------------------------------- ----------------------------------
CONST HEX: ARRAY['A'..'F'] OF INTEGER = (10,11,12,13,14,15);
VAR str: String;
Int,
i: ganze Zahl;
BEGINNEN
READLN(str);
Int := 0;
FOR i := 1 TO Länge(str) DO
IF str[i] < 'A' THEN Int := Int * 16 + ORD(str[i]) - 48
ELSE Int := Int * 16 + HEX[str[i]];
WRITELN(Int);
READLN;
ENDE.
=============================================== =
2.Dez zu HEX
-----------------------------------------------
HexString := Format('%0x',DecValue);
-----------------------------------------------
=============================================== ==
3. ASCII zu HEX/Mathe
--------------------------
Einheit Hexstr;
Schnittstelle
verwendet String16, SysUtils;
Typ
PByte = ^BYTE;
PROcedure BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: Word);
procedure HexStrToBytes(hHexStr: String; pbyteArray: Pointer);
procedure HexBytesToChar(var Response: String; hexbytes: PChar; InputLength: WORD);
Durchführung
procedure BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: WORD);
Konst
HexChars: Array[0..15] of Char = '0123456789ABCDEF';
var
i, j: WORT;
beginnen
SetLength(hHexStr, (InputLength * 2));
FillChar(hHexStr, sizeof(hHexStr), #0);
j := 1;
for i := 1 to InputLength do begin
hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
hHexStr[j] := Char(HexChars[pbyteArray^ und 15]);
inc(pbyteArray);
Ende;
Ende;
procedure HexBytesToChar(var Response: String; hexbytes: PChar; InputLength: WORD);
var
ich: WORT;
c: Byte;
beginnen
SetLength(Response, InputLength);
FillChar(Response, SizeOf(Response), #0);
for i := 0 to (InputLength - 1) do begin
c := BYTE(hexbytes[i]) And BYTE($f);
wenn c > 9 dann
Inkl. (ca. 37 $)
anders
Inc(c, 30 $);
Antwort[i + 1] := char(c);
Ende;{für}
Ende;
procedure HexStrToBytes(hHexStr: String; pbyteArray: Pointer);
{pbyteArray muss auf genügend Speicher verweisen, um die Ausgabe aufzunehmen}
var
i, j: WORT;
tempPPTr: PChar;
twoDigits: String[2];
beginnen
tempPtr := pbyteArray;
j := 1;
for i := 1 to (Length(hHexStr) DIV 2) beginnen
twoDigits := Copy(hHexStr, j, 2); Inc(j, 2);
PByte(tempPtr)^ := StrToInt('$' + twoDigits);
Ende;{für}
Ende;
Ende.
-------------------------------------------------- ----------------------------------
-------------------------------------------------- ----------------------------------
UNIT String16.
Schnittstelle
{$IFNDEF Win32}
procedure SetLength(var S: string; Len: Integer);
procedure SetString(var Dst: string; Src: PChar; Len: Integer);
{$ENDIF}
Durchführung
{$IFNDEF Win32}
procedure SetLength(var S: string; Len: Integer);
beginnen
wenn Len > 255 dann
S[0] := Chr(255)
anders
S[0] := Chr(Len)
Ende;
procedure SetString(var Dst: string; Src: PChar; Len: Integer);
beginnen
wenn Len > 255 dann
Move(Src^, Dst[1], 255)
anders
Move(Src^, Dst[1], Len);
SetLength(Dst, Len);
Ende;
{$ENDIF}
Ende.
=============================================== ===============
4.Binär zu Dezimal
-------------------------------------------------- ---------------
////////////////////////////////////////////////////////////////////////// /
// 32-Bit-Base2 in 32-Bit-Base10 konvertieren //
// maximale Zahl = 99 999 999, Rückgabe -1, wenn mehr //
////////////////////////////////////////////////////////////////////////// /
Funktion Base10(Base2:Integer): Integer;
asm
cmp eax,100000000 // Obergrenze prüfen
jb @1 // ok
mov eax,-1 // Fehlerflag
jmp @exit // Beenden mit -1
@1:
push ebx // Register speichern
drücke esi
xor esi,esi // Ergebnis = 0
mov ebx,10 // Umlenkbasis 10
mov ecx,8 // 8 Nibbles (10^8-1)
@2:
mov edx,0 // Rest löschen
div ebx // eax DIV 10, edx mod 10
add esi,edx // Ergebnis = Ergebnis + Rest[I]
ror esi,4 // Shift-Nibble
loop@2 // Schleife für alle 8 Nibbles
mov eax,esi // Funktionsergebnis
pop esi // Register wiederherstellen
Pop EBX
@Ausfahrt:
Ende;
-------------------------------------------------- ----------------------------------
Methode.2
[Oliver Townshend, [email protected]]
-------------------------------------------------- ----------------------------------
function IntToBin(Value: LongInt;Size: Integer): String;
var
i: Ganzzahl;
beginnen
Ergebnis:=';
for i:=Size downto 0 do begin
wenn Wert und (1 shl i)<>0 dann beginnen
Ergebnis:=Ergebnis+'1';
Ende, sonst beginnen
Ergebnis:=Ergebnis+'0';
Ende;
Ende;
Ende;
Funktion BinToInt(Wert: String): LongInt;
var
i,Größe: Ganzzahl;
beginnen
Ergebnis:=0;
Größe:=Länge(Wert);
for i:=Size downto 0 do begin
Wenn Copy(Value,i,1)='1', dann beginnen
Ergebnis:=Ergebnis+(1 shl i);
Ende;
Ende;
Ende;
=============================================== =========================