PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [c++] hibyte -lobyte



aL1ien
09.02.2010, 07:56
Ihr habt ein WORD (2Byte, 16BIT)



{ 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

l0dsb
09.02.2010, 10:14
Zweite Lösung ist meiner Meinung nach etwas sauberer:


#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;
}

aL1ien
09.02.2010, 11:20
Noch eine kleine Hilfstellung meinerseits



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

AlterHacker
10.02.2010, 21:21
char hi = (char) (wParam & 0xFF00 >> 8);
char low = (char)(wParam & 0xFF);
Jetzt nicht gecheckt sollte aber so in etwa hinhauen.