Bonjour à tous,

Petite question pour savoir si je fait bien les choses.
Je suis partie d'un code existant et apparemment fonctionnel, mais avec un autre matériel. Avec le nouveau cela ne fonctionne pas, j'ai donc refait le code et cela marche mais j'ai un doute sur la démarche.

j'interroge un composant par le port COM, et sa trame de retour est la suivante:

0xAA 0x00 0x22 0x00 0x03 0x00 0x00 0x09 0x4F 0x00 0x45 0xC2

Cette ligne me donne une longueur (valeur en gras) 0x00 0x00 0x09 0x4F, puis l'octet suivant 0x00 0x45 la qualité du signal.

la longueur est ici équivalente 0x94F = 2383mm
la qualité du signal vous l'avez compris = 0x45

Pour récupérer ces valeurs je fait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
//Pour récupérer la longueur
//bytes2 étant ma trame de retour du port COM
byte[] bytes3 = { bytes2[9], bytes2[8], bytes2[7], bytes2[6] };
Int32 res = BitConverter.ToInt32(bytes3, 0);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
//Pour récupérer la qualité du signal
//bytes2 étant ma trame de retour du port COM
byte[] bytes3 = { bytes2[10], bytes2[9]};
Int16 res = BitConverter.ToInt16(bytes3, 0);
Obligé de passer par une conversion ToInt32 puis ToInt16

Cela fonctionne, mais n'y aurait pas un autre moyen sans passer pas la création d'un 3eme tableau de bytes (le 1er étant ma trame de commande).
Et surtout sans avoir a faire une conversion spécifique tels que le ToInt32 ou ToInt16.

Pour le moment toutes mes réponses dans les trames ce limite à 1 ou 2 octets, donc ce n'est pas trop gênant, mais s'il y a moyen d'optimisé cela je suis preneur.

merci