PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 6 Bits aus Long rausschneiden



guenter1604
29.12.2011, 12:32
Hallo Forum,

aus einer Longvariable sollen die Bits 7 bis 12 in eine Bytevariable. Overlay wird wohl nicht gehen, da des ja nicht mit Byteraster liegt.
Wie wird das gemacht?

MagicWSmoke
29.12.2011, 12:57
Würd' ein Word-Overlay an Stelle 0 auf den Long legen, dann ein Byte-Overlay auf das Word an Stelle 1, das Word einmal nach links schieben, dann steht's bereits richtig im Byte drin, zum Schluss noch die Bits 7..6 im Byte mit AND ausmaskieren. Der Long wird dabei zerstört, vorher ggf. kopieren. Bei nur 6 Bit könnte auch die eher grobe Lösung Byte.5 = Long. 12, Byte.4 = Long. 11, usw. noch im Rahmen sein.
Edit:
Siebenmal rechts schieben, maskieren und das Ergebnis einem Byte zuweisen geht natürlich auch, dürfte aber länger brauchen.

guenter1604
29.12.2011, 21:47
Danke für die Hilfe,

das habe ich befürchtet aber nicht wahrhaben wollen. Dann werde ich vorerst die Bits mit ner For Next Scheife rauspicken....:(

MagicWSmoke
29.12.2011, 22:28
das habe ich befürchtet aber nicht wahrhaben wollen.
Hm, wieso das ? Das sind nur ein paar Zeilen, da sind keine Umwege nötig.
Edit:
Schnell und komplizierter:

Dim my_Long As Long
Dim my_Word As Word At my_Long Overlay
Dim my_Byte As Byte At my_Word + 1 Overlay

my_Long = &b11111111111111100011101100111111
Shift my_Word , Left , 1
my_Byte = my_Byte And &b00111111
Oder einfach, aber langsamer:

Dim my_Long As Long
Dim my_Byte As Byte

my_Long = &b11111111111111100011101100111111
Shift my_Long , Right , 7
my_Byte = my_Long And &b00111111