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?
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?
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.
Geändert von MagicWSmoke (29.12.2011 um 14:12 Uhr)
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....![]()
Hm, wieso das ? Das sind nur ein paar Zeilen, da sind keine Umwege nötig.
Edit:
Schnell und komplizierter:
Oder einfach, aber langsamer:Code: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
Code:Dim my_Long As Long Dim my_Byte As Byte my_Long = &b11111111111111100011101100111111 Shift my_Long , Right , 7 my_Byte = my_Long And &b00111111
Geändert von MagicWSmoke (29.12.2011 um 23:44 Uhr)
Lesezeichen