[c++] hibyte -lobyte
Ihr habt ein WORD (2Byte, 16BIT)
Code:
{ wParam }
HIBYTE LOBYTE
|_______|_______|
10110001 00010001
Ihr wollt nun den Wert von HYBYTE und vom LOWBYTE je in zwei chars speichern(char HIBYTE, char LOBYTE). Wie stellt ihr das am besten an? (Ihr kennt nur wParam. In wParam sind die 16bits gespeichert)
Viel Spass beim lösen ;)
Tipp: "&" und ">>" (Bitshift operatoren)
mfG
Zweite Lösung ist meiner Meinung nach etwas sauberer:
Code:
#include <conio.h>
#include <stdio.h>
union Word
{
unsigned short Value;
struct
{
unsigned char Lo;
unsigned char Hi;
};
};
int main(int argc, char **argv)
{
unsigned short Result;
unsigned char Hi = 0xde,
Lo = 0xad;
Result = (Lo) | (Hi << 8);
printf("Word: 0x%04x, Hi: 0x%02x, Lo: 0x%02x.\n", Result, Hi, Lo);
Word MyWord = { 0 };
MyWord.Hi = Hi;
MyWord.Lo = Lo;
printf("Word: 0x%04x, Hi: 0x%02x, Lo: 0x%02x.\n", MyWord.Value, Hi, Lo);
getch();
return 0;
}
Noch eine kleine Hilfstellung meinerseits
Code:
LOBYTE:
HIBYTE LOBYTE
|_______|_______|
10110001 00010001
1111111 & (Mit und verknüpfen)
_____________________________________________________________________
HYBITE=
{ wParam }
HIBYTE LOBYTE
|_______|_______|
>>10110001 00010001 (bitshift durchführen)
{ wParam }
HIBYTE LOBYTE
|_______|_______|
>> 10110001 0001000 (bitshift durchführen)
{ wParam }
HIBYTE LOBYTE
|_______|_______|
>> 10110001 0001000 (bitshift durchführen)
{ wParam }
HIBYTE LOBYTE
|_______|_______|
>> 10110001 000100 (bitshift durchführen)
...
...
...
{ wParam }
HIBYTE LOBYTE
|_______|_______|
>> 10110001 (bitshift durchführen)
und zum schluss mit & verknüpfen
Code:
char hi = (char) (wParam & 0xFF00 >> 8);
char low = (char)(wParam & 0xFF);
Jetzt nicht gecheckt sollte aber so in etwa hinhauen.