@Daniel B er will das ja im QuellCode zur besseren lesbarkeit nutzen.
BinToHex hilft hier ja nichts, er müsste ja sonst sowas wie BinToHex('1001010010', Hex) und dann noch HexToInt(Hex, Int) machen. Damit wird der QuellCode ja nicht gerade besser lesbarer.
Delphi-Quellcode:
(* Von Vorhin: *)
I := Bxxxx; {jeweils mit fester Bit-Anzahl}
I := Bxxxxxxxx; {4/8/16/32 Bit's}
I := Bxxxxxxxxxxxxxxxx;
I := Bxxxxxxxx_xxxxxxxx;
...
{ist der schnellte Weg - das Programm wird nicht langsamer, da keine zusätzlichen Routinen zur dekodierung eingebunden werden}
(* Mit Code 1 (siehe unten): *)
I := B(xxx); {1 - 10 Bit's}
(* Mit Code 2 (siehe unten): *)
I := B('xxx'); {1 - 32 Bit's}
Delphi-Quellcode:
(* Code 1 *)
Function B(I: LongWord): Word;
Var A: Word;
Begin
Result := $00;
A := $01;
While I > 0 do Begin
If I mod 10 > 0 Then Result := Result or A;
I := I div 10;
A := A shl 1;
End;
End;
(* Code 2 *)
Function B(I: String): LongWord;
Begin
Result := $0000;
While I > '' do Begin
Result := Result shl 1;
If I[1] <> '0' Then Result := Result or $0001;
Delete(I, 1, 1);
End;
End;
Diese Routinen sind so geschrieben, das sie auch bei Fehleingaben (keine Binärwerte) ohne
Exception durchlaufen. Sie reagieren auf Bit = '0' > 0 und Bit <> '0' > 1. Im Code 2 kommt es zum Überlauf (falscher Wert wird zurückgegen), wenn mehr als 32 Bit übergeben werden.
Es besteht noch die Möglichkeit "Code 2" so zu erweitern, das man auch Trennzeichen zur noch besseren lesbarkeit im Binärwert verwenden kann.
z.B.:
I := B('xxxx xx xx');
Delphi-Quellcode:
(* Code 2 - erweitert *)
Function B(I: String): LongWord;
Begin
Result := $0000;
While I > '' do Begin
If I[1] <> ' '{Trennzeichen} Then Begin
Result := Result shl 1;
If I[1] <> '0' Then Result := Result or $0001;
End;
Delete(I, 1, 1);
End;
End;
Und wenn jetzt noch diese Routinen überladen werden, können beide Parallel genutzt werden.
Delphi-Quellcode:
(* Code 1 *)
Function B(I: LongWord): Word; overload;
Var A: Word;
Begin
Result := $00;
A := $01;
While I > 0 do Begin
If I mod 10 > 0 Then Result := Result or A;
I := I div 10;
A := A shl 1;
End;
End;
(* Code 2 - erweitert *)
Function B(I: String): LongWord; overload;
Begin
Result := $0000;
While I > '' do Begin
If I[1] <> ' '{Trennzeichen} Then Begin
Result := Result shl 1;
If I[1] <> '0' Then Result := Result or $0001;
End;
Delete(I, 1, 1);
End;
End;
Ein Therapeut entspricht 1024 Gigapeut.