7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
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:
Da treten aber Werte wie z.b. 26 auf, die doch eigentlich gar nicht möglich sein dürften.
b1 := (b shr 6);
b2 := (b shl 2) shr 5; b3 := (b and 7); Gruß Zacherl |
Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
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;
|
Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
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. |
Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
@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 .. |
Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
Delphi-Quellcode:
Jetzt kommt bei den oberen Bytes auch noch Schrott raus :(
Instruction.SIB_Scale := (Instruction.SIB and 192);
Instruction.SIB_Index := (Instruction.SIB and 56); Instruction.SIB_Base := (Instruction.SIB and 7); |
Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
Ich denke es sollte so aussehen
Delphi-Quellcode:
Gruss
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); |
Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
Warum nicht einfach so:
Delphi-Quellcode:
Sollte auf jeden Fall funktionieren und ist auch etwas einfacher lesbar, denke ich.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 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