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 1 von 2  1 2      
Z4ppy

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

Bits auslesen?

  Alt 19. Nov 2008, 18:30
Ich will aus einem Daten-Byte (das aus einem String oder einem Stream stammt) die einzelnen Bits auslesen. Danach möchte ich mit ihnen weiterrechnen Nun hab ich dazu aber einige Fragen

1. Wie les ich die Bits aus? Ich hab zwar dieses Thema gefunden, aber das hat mir nicht sonderlich weitergeholfen
2. Wie speicher ich die Bits am besten ab? Ich benötige sämtliche 8 Bits (getrennt), da ich mit ihnen unterschiedlich weiterrechnen will...
Weitere Fragen folgen evtl.

MfG Z4ppy

PS.: Bitte fragt jetzt nicht nach, was ich am Schluss machen will Auf jeden Fall brauch ich für mein Projekt die einzelnen Bits - basta!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

Re: Bits auslesen?

  Alt 19. Nov 2008, 18:34
Tut mir Leid, dass Du mein Tut nicht verstanden hast. Aber was genau meinst Du mit "Bits auslesen"? Willst Du gezielt nachsehen, ob ein bestimmtes Bit gesetzt ist? Das geht mit dem "bitweisen und", in Delphi also AND.
Beispiel:if (Zahl and 16) = 16 then //Bit ist gesetzt
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Bits auslesen?

  Alt 19. Nov 2008, 18:36
Die Frage die sich mir stellt ist, ob es etwas bringt die einen Quelltext zu zeigen der bits setzt und ausliest. Oder ist es besser dir die Bitoperatoren zu erklären damit du auch verstehst wie das ganze funktioniert.
Weißt du Beispielsweise welche Bits bei der Zahl 182 gesetzt sind (bzw. wie man das durch rechnen heraus findet)? Also weißt du generell wie sich der Wert eines Byte aus den einzelnen Bits zusammensetzt und welche Wertigkeit dabei die entsprechenden bits haben? Und weißt du in diesem Zusammenhang warum in 1 Byte nur eine Zahl bis maximal 255 passt (unsigned)?
All das wäre interessant um zu wissen ab wo es sinnvoll ist anfzufangen mit der Erklärung
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Z4ppy

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

Re: Bits auslesen?

  Alt 19. Nov 2008, 18:47
@Deddy:Ja genau, ich will im Prinzip wissen, ob ein Bit eine 0 oder eine 1 enthält, bzw. welche Bits gesetzt sind
Für das hinterste Bit könnte man auch den Code nehmen, oder? (Wenn ja, dann hab ich dein Tut ja doch verstanden )
if(Zahl and (1 shl 0)=(1 shl 0)) then //hinterstes bit gesetzt Dann könnte man das nämlich durch ne schöne Schleife sausen lassen und hätte gleich alle Bits

@SirThornberry: Ja, ich weiss, was die einzelnen Bit-Operationen (or, and, xor) machen und ich kenne auch die Wertigkeit der einzelnen Bits
182 müsste etwa dem Bit 10110110 entsprechen, oder? (also 128 + 32 + 16 + 4 + 2)

MfG Z4ppy
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#5

Re: Bits auslesen?

  Alt 19. Nov 2008, 18:51
Damit hast Du doch im Prinzip Deinen Lösungsweg
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Z4ppy

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

Re: Bits auslesen?

  Alt 19. Nov 2008, 18:54
Danke für deine Hilfe Dann hab ich ja doch noch was von deinem Tut verstanden

MfG Z4ppy
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Bits auslesen?

  Alt 19. Nov 2008, 20:19
wenn man immer nur eine 1 shiftet und diese mit einem logischen und verknüpft reicht es auf ungleich 0 zu prüfen. Denn entweder dieses 1 bit ist gesetzt oder keines (denn die 1 ist ein einzelnes bit und wenn man dieses shiftet bleibt auch weiterhin nur 1 bit gesetzt welches dann entweder gesetzt ist (ungleich 0) oder eben nicht gesetzt ist (gleich 0)).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#8

Re: Bits auslesen?

  Alt 19. Nov 2008, 20:24
Es spricht aber auch nichts dagegen, gegen Konstanten zu prüfen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

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

Re: Bits auslesen?

  Alt 20. Nov 2008, 09:10
Da ich sowas öfter brauche (Datenanalyse), habe ich mir inzwischen Hilfstypen und -funktionen geschrieben, um die Arbeit mit Sets/Bits/Flags zu vereinfachen (und den Quelltext lesbarer zu halten). Anbei eine Unit für Delphi und FreePascal.

Richtig angenehm wird die Verwendung der TSetX-KlassenStrukturen erst ab BDS2006 (Funktionen und Operatoren für Strukturen). Für ältere Delphi-Version bleibt nur TSetX_Get/SetBit (bei Delphi-Versionen die "inline" unterstützen, gibt’s trotz Lesbarkeit kaum Performancenachteile).
Angehängte Dateien
Dateityp: zip ncxtypes_702.zip (2,4 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Bits auslesen?

  Alt 20. Nov 2008, 09:43
Nicht schlecht, aber ein wenig viel Code, finde ich.
Ich prüfe Bits so:
Delphi-Quellcode:
Const
  ccMyBit7Status = $0070;
  ccMyBit34Status = $0018;

...
Begin
  If FullStatusWord and ccMyBit7Status <> 0 then .... // Bit 7 gesetzt
  If FullStatusWord and ccMyBit34Status <> 0 Then .... // Bit 3 oder 4 gesetzt
  If FullStatusWord and ccMyBit34Status = ccMyBit34Status Then .... // Bit 3 und 4 gesetzt

// Oder so
  If FullStatusWord and (1 shl 7) <> 0 then ...
...
Wenn Du Dir den VCL-Quellcode anschaust, wird das auch eigentlich immer so gemacht: Man definiert sich seine Bitkonstanten so, das sie schön leserlich sind (ich packe immer ein 'cc' vor so eine Konstante, frag mich nicht wieso) und prüft dann über eine Maskierung.

Wenn man unbedingt will, kann man die Abfrage bzw. das Setzen noch in Routinen packen und so kapseln, oder gleich eine Klasse draus basteln und die Methoden als Class Function (bzw. Procedure) deklarieren.

Ich sehe aber nicht so viel Sinn darin, eine einfache Maskierung und abfrage noch zu kapseln.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:22 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