WORD zerlegen und wieder zusammen setzen.
-
Folgendes Problem, ich definiere mir ein WORD, um diese zu versenden muss ich es auseinander nehmen:
char send[2]; WORD FC=1111; send[0]=LOBYTE(FC); send[1]=HIBYTE(FC);
Nun brauche ich aber dort wo es hingeschickt wurde wider das komplette WORD
deswegen dachte ich an so etwas:char recv[2]; WORD FC1; LOBYTE(FC1)=recv[0]; HIBYTE(FC1)=recv[1];
Da sagt er mir aber dann das LOBYTE und HIBYTE keine L-Werte sind. Kann ich das WORD anders wieder zusammensetzen?
-
Sind LOBYTE und HIBYTE nicht nur irgendwelche WinAPI-Makros?
-
Ja, haste recht demnach hier im falschen Thread...
Naja wird schon ein Forumbotverschieben.
-
bigborre schrieb:
Ja, haste recht demnach hier im falschen Thread...
Weiß ich nicht, aber dass solche Makros keine lvalues liefern können, ist schon klar.
Naja wird schon ein Forumbot
verschieben.
*g* Eigentlich verschieben das einfach die Moderatoren, der Forumbot-Post kommt nur, damit sich die Leute auch auskennen, was mit ihrem Beitrag passiert ist.
-
Wie wär's damit (ned getestet)
WORD FC1 = *( (WORD *) recv);
-
test
-
union WordOrBytes {
unsigned short word; // 16 Bit
unsigned char byte[2]; // 2 x 8 Bit
};
WordOrBytes value;
value.word = 0x0102; //Wort speichern
cout << value.byte[1] << enld; //2. Byte ausgaben
-
@memeog ok ich denke ich weiß was du da machen möchtest, doch wie kann ich dann zwei werte zu einem WORD zusammenfügen , das seh ich noch nicht ganz...
z. Brecv[0]=01; //und recv[1]=02;
Und ich will dann mein WORd FC als 0102 haben.
-
memog schrieb:
unsigned short word; // 16 Bit
Hä? WORD ist doch schon ein unsigned short.
-
Wie wärs mit
char recv[2]; WORD FC = (recv[0] << 8) + recv[1];
-
Die Idee hatte ich auch schon, aber die Frage ist ob er dann 0102 oder ob er nicht doch (01+02) also 0003 in mein WORD schreibt.
-
WORD FC = (01 << 8) + 02; // Ergebnis 0102 WORD FC = 01 + 02; // Ergebnis 03
-
Hab es gerade auch selber ausprobiert
man muss bloß daruf achten das man erst recv[1] und dann recv[0] addiert
#include <windows.h> #include <winsock.h> // bei manchan compilern muss man nur windows.h includieren (zB VC++) #include <stdio.h> #include <windef.h> #include <iostream> using namespace std; int main() { WORD FC=0x0102; cout<<hex<<FC<<endl; char set[2]; set[0]=LOBYTE(FC); set[1]=HIBYTE(FC); cout<<"Set ="<<hex<<set[0]<<hex<<set[1]<<endl; WORD FC1 = (set[1]<<8) + set[0]; cout<<"FC1 ="<<hex<<FC1<<endl; }
, coole Sache aber verstehen tu ich es nicht, was macht das
<<8
?
-
Das kannst du hier nachlesen:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_clang_bitwise_shift_operators.asp
-
Warum muss das WORD fürs Senden auseinander genommen werden? Und wenn du dafür LOBYTE und HIBYTE nimmst, warum dann fürs Zusammenfügen nicht das passende MAKEWORD?
-
Kann ich dir sagen, weil ich es bis gerade eben nicht kannte.
Man kann halt nicht alles wissen.