![]() |
Bitweises kopieren aus einem String
Der folgende Code ist dazu gedacht, teile eines strings auf bitebene kopieren. Zurückgegeben wird der Dezimalwert des kopierten strings.
Beispiel:
Delphi-Quellcode:
Binärcode zu 5 6 7
procedure TestThatFunction;
begin s := '567'; i := BitCopyToInt(s, 6, 7); end; 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:
[edit=Matze]Dieses Thema reicht nicht ganz aus, um in die Code-Library aufgenommen zu werden. MfG, Matze[/edit]
// -----------------------------------------------------------------------------
// 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 |
Re: Bitweises kopieren aus einem String
Eine blöde Frage: wozu braucht man das? :gruebel:
Mir fällt auf Anhieb keine Anwendungsmöglichkeit ein, aber wenn ich es mal brauchen sollte, komme ich darauf zurück ;) |
Re: Bitweises kopieren aus einem String
Zitat:
![]() Gruß Neutral General |
Re: Bitweises kopieren aus einem String
Hi,
warum nicht mit links/rechts schieben. Dann fällt alles blaue raus. Wozu man das brauch würde mich aber auch mal interessieren. Gruß oki |
Re: Bitweises kopieren aus einem String
Hi,
zum Beispiel hab ich es dafür verwendet um Daten die aus einem Gerät (über Comport) ausgelesen wurden wieder "lesbar" zu machen. In meinem Besipiel war Datum/Uhrzeit wie folgt in 4 Byte gespeichert: 6 Bits Sekunden, 6 Bits Minuten, 5 Bits Stunden, 5 Bits Tage, 4 Bits Monate, 6 Bits Jahre Ich nehme an, dass bei diversen Hardwareansteuerungen der Code sehr nützlich sein kann :) Gruß |
Re: Bitweises kopieren aus einem String
Ahja, alles klar. :mrgreen:
|
Re: Bitweises kopieren aus einem String
Hallo Ansgar,
ist jetzt völlig off-topic, aber dein Beispiel mit dem Timestamp der externen Hardware: so sieht ein DOS-Timestamp aus, wenn man ihn um ein Bit nach links schiebt um die Sekundenauflösung von zwei auf eins zu erhöhen.
Delphi-Quellcode:
So oder ähnlich geht das dann vielleicht auch.
uses
DateUtils; // OneSecond function TimeStampToDateTime(ts: DWORD): TDateTime; begin Result := FileDateToDateTime(ts shr 1) + OneSecond * Ord(Odd(ts)); end; Freundliche Grüße |
Re: Bitweises kopieren aus einem String
Hallo marabu,
das werd ich mir auch nochmal anschauen. danke fürs OT Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz