-
? Need lvalue ?
Bonjour à tous,
je suis en train de faire une fonction qui me permet d'envoyer une trame de type série d'un boitier électronique, à un PC.
j'ai fait la réception, et je fais l'émission.
Ma trame est décomposée comme suivi : ( en hexa)
80 00 80 00 AA AA 00 02 AA BB 45 1D 00 00
explication :
80 00 80 00 : marqueur de début de trame
AA AA : identifiant de la trame
00 02 : longueur des données
AA BB : les données
45 ID : le checksum
00 00 : marqueur de fin de trame.
jusque là tout est ok ?
Pour ma réception, je fais :
id = (UINT16)(str[ 4 ] << 8) + str[ 5 ];
pour que j'obitenne 0xAAAA dans mon id.
tout fonctionne.
mais pour l'émission, il faut que ça fonctionne dans l'autre sens, je veux mettre AAAA dans la trame.
(UINT16)(str[ 4 ] << 8) + str[ 5 ] = id ;
ne foncitonne pas et me renvoie "invalid expression, need lvalue"
l'ID sera encore de type 0xAAAA. codé sur 2 octets. mon str est sur 8 bits.
Je suis un peu coincé...
Merci de votre aide.
-
Code:
(UINT16)(str[ 4 ] << 8) + str[ 5 ] = id ;
L'expression à gauche du signe = est une valeur et ne désigne pas un objet.
Pour assigner une valeur (située à droite du signe =), il faut qu'à gauche de ce signe figure une expression qui désigne un objet, comme dans id = (UINT16)(str[ 4 ] << 8) + str[ 5 ]. La valeur à droite sera stockée dans l'objet désigné à gauche.
Il faut décomposer ta valeur en éléments qui peuvent être émis individuellement. Ces éléments peuvent être envoyé au fur et à mesure qu'ils sont calculés ou ils peuvent être stockés dans un tableau, et le contenu du tableau émis ensuite.
-
Merci pour ta réponse.
Comment puis-je faire pour décomposer justement cette valeur simplement ?
pour les identifiants ça ne pose pas de probleme, mais pour par exemple la longueur des données, et le checksum, c'est plus embétant...
-
J'ai réussi à me débrouiller en faisant : *(unsigned short *)&str[4] = 0xAAAA;
et un htons pour passer de little a big endian.
Merci pour ton conseil.
Arnaud