Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bits auslesen? (https://www.delphipraxis.net/124478-bits-auslesen.html)

nicodex 20. Nov 2008 08:53

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.

alzaimar 20. Nov 2008 08:56

Re: Bits auslesen?
 
Na klar.

Luckie 20. Nov 2008 08:59

Re: Bits auslesen?
 
Ich habe mir mal erlaubt die Unit bei mir zu Hosten: http://www.michael-puff.de/Developer.../Importe/Nico/ sonst ist sie wieder verschwunden.

nicodex 20. Nov 2008 09:00

Re: Bits auslesen?
 
Zitat:

Zitat von alzaimar
Bis sich die Implementierung der Sets ändert...

Theoretisch, ja. Aber dann kann ich auch gleich den Compiler wechseln ;)
Sollte dieser Umstand eintreten (meiner Meinung nach nicht zu erwarten), dann portiert man halt die Hilfstypen und -funktionen...

Zitat:

Zitat von Luckie
Ich habe mir mal erlaubt die Unit bei mir zu Hosten: http://www.michael-puff.de/Developer.../Importe/Nico/ sonst ist sie wieder verschwunden.

Danke, aber die Unit ist Teil von http://www.bendlins.de/nico/delphi/NcxWOW64.zip

Luckie 20. Nov 2008 09:04

Re: Bits auslesen?
 
Ist jetzt auch bei mir gelandet. ;)

Z4ppy 21. Nov 2008 23:47

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:
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;
Dann ruf ich das so auf:
Delphi-Quellcode:
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;
Das gibt aber das hier:
Code:
ord: 97 | Bit: 43214167772161242548211761055642072234358324
:wall: :wall: :wall:

Wenn ich mal nach jeder einzelnen Integer leerschläge einfüge, sieht das so aus:
Code:
ord: 97 | Bit: 43 2 14 16777216 1242548 2117610556 4207223 4358324
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:

Nun, zum Test hab ich dann mal das gemacht:
Delphi-Quellcode:
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;
Und siehe da, es kommt das Richtige raus:
Code:
ord: 97 | Bit: 01100001
Kann mir das jemand erklären? :? Der Code zum Auslesen der Bits ist ja absolut identisch...

MfG Z4ppy

€dit: So, nochmal Direktvergleich, dann wirds nämlich noch seltsamer :?
Delphi-Quellcode:
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;
Inhalt Edit2:
Code:
ord: 97 | Bit: 01100001
Inhalt Edit3:
Code:
ord: 97 | Bit: 00000000
:wiejetzt:

Hawkeye219 22. Nov 2008 00:00

Re: Bits auslesen?
 
Hallo,

wenn du Werte empfangen möchtest, dann musst du das dem Compiler auch sagen:

Delphi-Quellcode:
//procedure GetBits(X:Byte;Target:array of integer);
procedure GetBits(X:Byte;var Target:array of integer);
Gruß Hawkeye

Z4ppy 22. Nov 2008 00:03

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.
Seite 2 von 2     12   

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