Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden (https://www.delphipraxis.net/125365-7-6-5-4-3-und-0-1-2-bit-fuer-neues-byte-verwenden.html)

Zacherl 4. Dez 2008 20:32


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

3_of_8 4. Dez 2008 20:44

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;

Cyf 4. Dez 2008 20:45

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.

Zacherl 4. Dez 2008 20:53

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 ..

Zacherl 4. Dez 2008 20:57

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
 
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 :(

thkerkmann 4. Dez 2008 21:57

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
 
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

3_of_8 4. Dez 2008 22:00

Re: 7, 6 - 5, 4, 3 und 0, 1, 2 Bit für neues Byte verwenden
 
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.


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