Einzelnen Beitrag anzeigen

angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#1

Bitweises kopieren aus einem String

  Alt 3. Aug 2007, 13:37
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
00000101 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:
uses
  Math;

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]
Ansgar
  Mit Zitat antworten Zitat