AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bits auslesen?

Ein Thema von Z4ppy · begonnen am 19. Nov 2008 · letzter Beitrag vom 22. Nov 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Bits auslesen?

  Alt 20. Nov 2008, 09:53
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.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: Bits auslesen?

  Alt 20. Nov 2008, 09:56
Na klar.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Bits auslesen?

  Alt 20. Nov 2008, 09:59
Ich habe mir mal erlaubt die Unit bei mir zu Hosten: http://www.michael-puff.de/Developer.../Importe/Nico/ sonst ist sie wieder verschwunden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Bits auslesen?

  Alt 20. Nov 2008, 10:00
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 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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Bits auslesen?

  Alt 20. Nov 2008, 10:04
Ist jetzt auch bei mir gelandet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Bits auslesen?

  Alt 22. Nov 2008, 00:47
So, nochmal
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


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

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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#17

Re: Bits auslesen?

  Alt 22. Nov 2008, 01:00
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
  Mit Zitat antworten Zitat
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Bits auslesen?

  Alt 22. Nov 2008, 01:03

War ja klar, dass das sowas is Ich glaub, ich sollte mal bissl mehr schlafen

Danke dir

MfG Z4ppy
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz