![]() |
Re: Bits auslesen?
Ich muss öfter mit schlecht oder gar nicht dokumentierten Datenblöcken arbeiten. Da ist es dann mit einer aktuellen Delphi-Version einfacher die Strukturmitgleider gleich als TSetX zu definieren und mittels Bit[x]-Property darauf zuzugreifen (solange bis die Bedeutung feststeht und/oder ich einen eigenen Typen dafür deklariere). Zumal Sets die Arbeit mit mehren Bits bzw. Masken vereinfachen können. Die generischen Hilfsfunktionen und -typen sind ja auch nicht die Lösung für alle Probleme :)
ps: Die Menge des Quellcodes für die Hilfstypen ist mir egal (einmalige Aktion), solange es mir die Arbeit mit den Daten vereinfacht. |
Re: Bits auslesen?
Na klar.
|
Re: Bits auslesen?
Ich habe mir mal erlaubt die Unit bei mir zu Hosten:
![]() |
Re: Bits auslesen?
Zitat:
Sollte dieser Umstand eintreten (meiner Meinung nach nicht zu erwarten), dann portiert man halt die Hilfstypen und -funktionen... Zitat:
![]() |
Re: Bits auslesen?
Ist jetzt auch bei mir gelandet. ;)
|
Re: Bits auslesen?
So, nochmal :lol:
Hab nämlich ein seltsames Problem. Ich hab nun eine Procedur GetBits, der übergebe ich das Byte X und das array, in das sie die Bits schreiben soll (als integer)...
Delphi-Quellcode:
Dann ruf ich das so auf:
procedure GetBits(X:Byte;Target:array of integer);
var i:integer; begin for i:=0 to 7 do if(X and (1 shl i))=(1 shl i) then Target[7-i]:=1 else Target[7-i]:=0; end;
Delphi-Quellcode:
Das gibt aber das hier:
procedure TForm1.Button1Click(Sender: TObject);
var tmp:Array[0..7]of integer; i:integer; begin GetBits(ord(Edit1.Text[1]),tmp); Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: '; for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]); end;
Code:
:wall: :wall: :wall:
ord: 97 | Bit: 43214167772161242548211761055642072234358324
Wenn ich mal nach jeder einzelnen Integer leerschläge einfüge, sieht das so aus:
Code:
Abgesehen davon, dass die 6. Zahl an der oberen Grenze von Integer kratzt, ist das natürlich völlig normal und genau das, was ich wollte :roll:
ord: 97 | Bit: 43 2 14 16777216 1242548 2117610556 4207223 4358324
Nun, zum Test hab ich dann mal das gemacht:
Delphi-Quellcode:
Und siehe da, es kommt das Richtige raus:
procedure TForm1.Button1Click(Sender: TObject);
var tmp:Array[0..7]of integer; i:integer; begin for i:=0 to 7 do if(ord(Edit1.Text[1]) and (1 shl i))=(1 shl i) then tmp[7-i]:=1 else tmp[7-i]:=0; Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: '; for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]); end;
Code:
Kann mir das jemand erklären? :? Der Code zum Auslesen der Bits ist ja absolut identisch...
ord: 97 | Bit: 01100001
MfG Z4ppy €dit: So, nochmal Direktvergleich, dann wirds nämlich noch seltsamer :?
Delphi-Quellcode:
Inhalt Edit2:
procedure TForm1.Button1Click(Sender: TObject);
var tmp,tmp2:Array[0..7]of integer; i:integer; begin for i:=0 to 7 do if(ord(Edit1.Text[1]) and (1 shl i))=(1 shl i) then tmp[7-i]:=1 else tmp[7-i]:=0; Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: '; for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]); GetBits(ord(Edit1.Text[1]),tmp2); Edit3.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: '; for i:=0 to 7 do Edit3.Text:=Edit3.Text+inttostr(tmp2[i]); end;
Code:
Inhalt Edit3:
ord: 97 | Bit: 01100001
Code:
:wiejetzt:
ord: 97 | Bit: 00000000
|
Re: Bits auslesen?
Hallo,
wenn du Werte empfangen möchtest, dann musst du das dem Compiler auch sagen:
Delphi-Quellcode:
Gruß Hawkeye
//procedure GetBits(X:Byte;Target:array of integer);
procedure GetBits(X:Byte;var Target:array of integer); |
Re: Bits auslesen?
:wall:
War ja klar, dass das sowas is :roll: Ich glaub, ich sollte mal bissl mehr schlafen :lol: Danke dir :thumb: MfG Z4ppy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 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