Der folgende Code ist dazu gedacht, teile eines strings auf bitebene kopieren. Zurückgegeben wird der Dezimalwert des kopierten strings.
Beispiel:
Delphi-Quellcode:
procedure TestThatFunction;
begin
s := '567';
i := BitCopyToInt(s, 6, 7);
end;
Binärcode zu 5 6 7
00000
101 00000110 00000111
die Bitweise Kopie nimmt nun ab der 6. Position 7 Zeichen (rot markiert)
Der Rückgabewert ist in diesem Fall 64 + 16 = 80
Delphi-Quellcode:
// -----------------------------------------------------------------------------
// BitCopyToInt
// Erzeugt eine Bitweise Kopie von String s und gibt den daraus
// resultierenden Dezimalwert zurück
// -----------------------------------------------------------------------------
function BitCopyToInt(s: String; bitStart, bitLength: Integer): Integer;
var
i: Integer;
bit: Integer;
const
bit1 = $01;
bit2 = $02;
bit3 = $04;
bit4 = $08;
bit5 = $10;
bit6 = $20;
bit7 = $40;
bit8 = $80;
begin
if ((bitStart + bitLength - 1) > (length(s) * 8)) then
Result := -1
else
begin
Result := 0;
for i := bitStart to bitStart + bitLength - 1 do
begin
// index
case i mod 8 of
1: bit := bit8;
2: bit := bit7;
3: bit := bit6;
4: bit := bit5;
5: bit := bit4;
6: bit := bit3;
7: bit := bit2;
else
bit := bit1;
end;
Result := Result + IfThen((Ord(s[Trunc((i + 7) / 8)]) and bit) = bit
, Trunc(Power(2, (bitStart + bitLength - i - 1) )), 0);
end;
end;
end; // BitCopyToInt
[edit=Matze]Dieses Thema reicht nicht ganz aus, um in die Code-Library aufgenommen zu werden. MfG, Matze[/edit]