Frage zur Syntax einer Variablendeklaration
-
Hallo miteinander,
ich habe mein Problem dank der Suchen-Funktion beseitigen können.
Ich habe den folgenden Code angewendetfor ( int i = 1; i <= Message.Length(); ++i ) { char letter = Message[i]; unsigned short vkCode = VkKeyScan(letter); int vkKey = (vkCode << 8) >> 8; int vkShiftState = vkCode >> 8; if ( vkShiftState & 0x1U ) keybd_event(VK_SHIFT, 0, 0, 0); if ( vkShiftState & 0x2U ) keybd_event(VK_CONTROL, 0, 0, 0); if ( vkShiftState & 0x4U ) keybd_event(VK_MENU, 0, 0, 0); keybd_event(vkKey, 0, 0, 0); keybd_event(vkKey, 0, KEYEVENTF_KEYUP, 0); if ( vkShiftState & 0x1U ) keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); if ( vkShiftState & 0x2U ) keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); if ( vkShiftState & 0x4U ) keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); }
Da dieser Code die Lösung meines Problems ist, möchte ich diesen auch gerne verstehen.
Daher meine Fragen:
Wie ist diese Art der Variablendeklaration zu verstehen "int vkKey = (vkCode <<>> 8;"?
Bedeutet 0x1U,0x2U.... Unsigned?
Ich hoffe doch meine Fragen führen nicht zu Gegenfragen.
Mfg. Chakuza
-
Hallo
<< und >> sind hier die Bitshift-Operatoren. Diese verschieben den Speicherinhalt einer Variable um eine bestimmte Anzahl von Bits. In diesem Beispiel wird das eingesetzt um einen Teil eines Wertes abzuschneiden. Schritt für Schritt sieht die Zeile so aus :
- Voraussetzung : in vkCode steht ein Integer-Wert, desen erste 16 Bits z.B. so aussehen 10010110 10101011
- (vkCode <<: Als erstes werden die Bits um 8 Position hochgeschoben. Die freiwerdenden Plätze werden mit 0 gefüllt 10101011 00000000. Das Ergebnis wird in einer temporären Variable weitergeben
- >> 8 : Die Bits werden wieder um 8 Position zurückgeschoben. Das temporäre Ergebnis ist 00000000 10101011
- int vkKey = Das Ergebnis wird der deklarierten Variable vkKey als Initialisierungswert zugweisen.Diese Operation sorgt also dafür das von vkCode nur die 8 untersten Bits an vkKey weitergegeben werden. Soetwas ist in systemnahen Umgebungen nicht unüblich. Weiteres zum Thema Bitoperatoren findest du hier.
bis bald
akari
-
Hallo,
recht herzlichen Dank akari.Mfg. Sven