Also, ich hab das ganze nochmal geschrieben.
Was es kann:
- umformen in jede basis (nicht nur Binär)
- Zurückumformen aus jeder Basis
Zeilenumbrücher ignoriere ich einfach, beim zurückkonvertieren werden sie ja eh wiederhergestellt^^
Mein Formular:
2 Memos, ein SpinEdit und zwei Buttons
Die Umrechnungen entstammen übrigens der
Unit UBase2Base von mir die afaik auch in der CodeLib steht.
Delphi-Quellcode:
function Potenz(Base, Exp : Integer):Int64;
var i:Integer;
begin
Result:=1;
for i:=1
to Exp
do Result:=Result * Base;
end;
function GetChar(Number: Integer):Char;
begin
if Number<10
then Result:=Chr(Number+48)
else if Number<91
then Result:=Chr(Number+55)
else Result:='
';
end;
function GetInt(Value: Char):Integer;
begin
Result:=Ord(Value);
if Result<58
then Result:=Result-48
else if Result<91
then Result:=Result-55
else Result:=0;
end;
function DecToBase(Value:Int64; Base:Integer):
String;
var Rest:Integer;
begin
Result:='
';
repeat
Rest:=Value
Mod Base;
Value:=Value
Div Base;
Result:=GetChar(Rest) + Result;
until Value=0;
end;
function BaseToDec(Value:
String; Base:Integer):Int64;
var i, j:Integer;
begin
Value:=Trim(Value);
j:=Length(Value)-1;
Result:=0;
for i:=1
to Length(Value)
do
begin
Result:=Result + GetInt(Value[i]) * Potenz(Base,j);
dec(j);
end;
end;
function Code(Val:
String; Base: Integer):
String;
var i:Integer;
begin
Result:='
';
for i:=1
to Length(Val)
do
Result:=Result+DecToBase(Ord(Val[i]),Base)+'
';
end;
function DeCode(Val:
String; Base: Integer):
String;
var P: Integer;
A:
String;
begin
Result:='
';
P:=Pos('
',Val);
while P>1
do
begin
A:=copy(Val,1,P);
Result:=Result+Chr(BaseToDec(A,Base));
Delete(Val,1,P);
P:=Pos('
',Val);
end;
end;
Edit: Schön verpackt^^
BTW:
Basis 2: 1000101 1100100 1101001 1110100 111010 100000 1010011 1100011 1101000 11110110 1101110 100000 1110110 1100101 1110010 1110000 1100001 1100011 1101011 1110100 1011110 1011110
Basis 4: 1011 1210 1221 1310 322 200 1103 1203 1220 3312 1232 200 1312 1211 1302 1300 1201 1203 1223 1310 1132 1132
Basis 16: 45 64 69 74 3A 20 53 63 68 F6 6E 20 76 65 72 70 61 63 6B 74 5E 5E