// Die meist
verwendeten Zahlensysteme
(neben dem
Dezimalsystem)
im // Getestet mit D4 unter WinME function IntTo2_36 (Zahl: integer; Basis: Byte; Minus: Boolean; var s: string): boolean; var hlp: int64; function zeichen(i: integer): char; begin case i of 0..9: result := chr(48 + i); else result := chr(55 + i); end; end; begin if Basis in [2..36] then begin result := true; if Zahl = 0 then s := '0' else begin if Minus then hlp := abs(Zahl) else if Zahl < 0 then hlp := $100000000 + Zahl else hlp := Zahl; s := ''; while hlp > 0 do begin s := zeichen(hlp mod Basis) + s; hlp := hlp div Basis; end; end; if Minus and (Zahl < 0) then s := '-' + s; end else result := false end; // Beispielaufruf procedure TFormx.Button4Click(Sender: TObject); var s: string; begin if not IntTo2_36(60350, 16, true, s) then showmessage('Zahlensystem ist nicht in 2..36') else showmessage(s); end; // -------------------------------------------------------------- // Zahlenstrings
kann man auch wieder in dezimale Integerwerte wandeln, wenn function StrToDec(s: string; Basis: byte; var z: integer): boolean; var minus: boolean; x, lg: integer; bt: byte; hlp: int64; function bytes(c: char; var b: byte): boolean; begin case c of '0'..'9': b := ord(c) - 48; 'A'..'Z': b := ord(c) - 55; else b := 255; end; result := (b < basis); end; function rechnen: int64; var j: integer; begin result := 1; for j := 1 to lg - x do result := result * basis; end; function zeichenfehler: boolean; const z = '-+'; var i, p: integer; begin result := true; lg := length(s); for i := 1 to 2 do begin p := pos(z[i], s); if (p > 0) and ((lastdelimiter(z[i], s) <> p) or (p > 1) and (p <> lg)) then exit; end; result := false; end; procedure vornullweg; var y: integer; begin y := 1; s := stringreplace(s, '-', '', []); s := stringreplace(s, '+', '', []); lg := length(s); while y < lg do begin if s[y] <> '0' then break; inc(y); end; s := copy(s, y, lg); end; begin result := false; s := uppercase(trim(stringreplace(s, #32, '', [rfreplaceall]))); if basis in [2..36] then begin if zeichenfehler then exit; minus := pos('-', s) > 0; vornullweg; if s = '' then exit; lg := length(s); hlp := 0; for x := lg downto 1 do begin if not bytes(s[x], bt) then exit; try hlp := hlp + bt * rechnen; except exit; end; end; if hlp > maxint then hlp := hlp - $100000000; if minus then hlp := -hlp; if (hlp > maxint) or (hlp < low(integer)) then exit; z := hlp; result := true; end; end; // Beispielaufruf procedure TFormx.Button4Click(Sender: TObject); var i: integer; begin if not StrToDec('-6AHH', 21, i) then showmessage('Fehler') else showmessage(inttostr(i)); end; |