// 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;
|





