- Offizieller Beitrag
Auch wenn es selten ist: Heute habe auch ich mal eine Frage.
Hat jemand eine Erklärung für dieses Problem:
Wenn ich eine Variable vom Typ 'Word' aus deren Lo- und HiByte erstelle, erhalte ich korrekte Werte nur für positive Word.
Wo steckt da der Fehler? Habe es extra mit zwei völlig verschiedenen Methoden zur Erstellung der Word-Variable probiert. Das Ergebnis ist identisch.
(Wofür man sowas braucht? Nun, z.B. werden Tastaturinfos auf Wordbasis übermittelt mit getrennten Werten im LoByte und HiByte.)
Spoiler anzeigen
#cs
WORD LOBYTE HIBYTE
513 1 2
258 2 1
-2 254 255
-257 255 254
#ce
Local $aByte[4][3] = [[513,1,2],[258,2,1],[-2,254,255],[-257,255,254]]
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To 3
ConsoleWrite('_MakeWord_1 [' & $aByte[$i][1] & ', ' & $aByte[$i][2] & '] erwartet: ' & $aByte[$i][0] & ', Func: ' & _MakeWord_1($aByte[$i][1], $aByte[$i][2]) & @CRLF)
ConsoleWrite('_MakeWord_2 [' & $aByte[$i][1] & ', ' & $aByte[$i][2] & '] erwartet: ' & $aByte[$i][0] & ', Func: ' & _MakeWord_2($aByte[$i][1], $aByte[$i][2]) & @CRLF & @CRLF)
Next
Func _MakeWord_1($iLo, $iHi)
Return BitOR(BitShift($iHi, -8), BitAND($iLo, 0xFF))
EndFunc
Func _MakeWord_2($iLo, $iHi)
Local $tWord = DllStructCreate("WORD")
Local $tBytes = DllStructCreate("BYTE;BYTE;", DllStructGetPtr($tWord))
DllStructSetData($tBytes, 1, $iLo)
DllStructSetData($tBytes, 2, $iHi)
Return DllStructGetData($tWord, 1)
EndFunc