AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden

Ein Thema von Zacherl · begonnen am 4. Dez 2008 · letzter Beitrag vom 4. Dez 2008
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden

  Alt 4. Dez 2008, 21:32
Hey,

ich wusste nicht wie genau ich den Titel formulieren sollte. Ich habe ein bestimmtes Byte, z.b. $AC. Nun möchte ich daraus 3 Bytes machen und zwar soll im Byte1 nut das 7. und 6. Bit aus dem AC Byte verwendet werden, in Byte 2 das 5. 4. und 3. und so weiter.

Mein Ansatz war:
Delphi-Quellcode:
b1 := (b shr 6);
      b2 := (b shl 2) shr 5;
      b3 := (b and 7);
Da treten aber Werte wie z.b. 26 auf, die doch eigentlich gar nicht möglich sein dürften.

Gruß Zacherl
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden

  Alt 4. Dez 2008, 21:44
Hast du b vielleicht als Integer/Cardinal definiert? Treten die Probleme vielleicht nur bei b2 auf? Wenn ja, probier mal b2:=(b shr 3) and $07;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#3

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden

  Alt 4. Dez 2008, 21:45
Maskier die Bits mit der and-Verknüpfung.

Beispiel:

14 (Binär: 1110) and 3 (Binär: 0011) = 2 (Binär: 0010)

Es bleiben nur Bits, die in beiden Werten gesetzt sind erhalten.

[Edit]Entschuldige, hab deinen 3ten Wert überlesen, da versuchst du das ja bereits.
Dennoch solltest du das generell so machen, denn wenn ich dich richtig verstehe, brauchst du hinterher die Bits an ihren ursprünglichen Stellen und du vergisst hierbei sie zurück zu schieben, mit and kannst du dir das komplett sparen.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden

  Alt 4. Dez 2008, 21:53
@3_of_8: Ja tritt nur beim 2. Byte auf. Ist aber als Byte deklariert.
@Cyf: Ich probier das jetzt mal alles mit and zu lösen ..
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden

  Alt 4. Dez 2008, 21:57
Delphi-Quellcode:
Instruction.SIB_Scale := (Instruction.SIB and 192);
      Instruction.SIB_Index := (Instruction.SIB and 56);
      Instruction.SIB_Base := (Instruction.SIB and 7);
Jetzt kommt bei den oberen Bytes auch noch Schrott raus
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#6

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden

  Alt 4. Dez 2008, 22:57
Ich denke es sollte so aussehen

Delphi-Quellcode:
Instruction.SIB_Scale := (Instruction.SIB and $C0); // ich verwende für sowas lieber hex
Instruction.SIB_Index := (Instruction.SIB and $38) shr 3;
Instruction.SIB_Base := (Instruction.SIB and $07);
Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden

  Alt 4. Dez 2008, 23:00
Warum nicht einfach so:

Delphi-Quellcode:
Instruction.SIB_Scale := (Instruction.SIB shr 6) and $03;
Instruction.SIB_Index := (Instruction.SIB shr 3) and $07;
Instruction.SIB_Base := Instruction.SIB and $07;
Sollte auf jeden Fall funktionieren und ist auch etwas einfacher lesbar, denke ich.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:26 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