Quand je parlais de binaire, j'entendais ne pas envoyer le "texte" des valeurs (ni en décimal, ni en binaire, ni en hexadécimal), mais directement envoyer l'octet correspondant à la valeur.
Quand tu envois le texte "80," , tu envois 3 octets, chacun codant en ascii un caractère. En occurrence, tu enverra les octets 0x38("8") 0x30("0") et 0x2C(",")
A la place, tu pourrais envoyer un seul octet, 0x50 qui vaut 80
L'avantage est multiple :
- tu envois 1 octet au lieu de 3 (sous réserve d'envoyer des nombres entre 0 et 255, ou alors entre -128 et +127)
- tu n'as plus de traitement complexe (sscanf) à faire, il suffit de lire chaque octet et de l'affecter à la variable souhaitée
Le principal inconvénient est que les données sont un poil moins "lisibles" par l'homme.
Pour ma part, j'envois en général les trames sous le format suivant :
octet_constant_de_début_de_frame octet_longueur_de_la_frame D1 D2 D3 ... DN octet_checksum
- l'octet constant de début de frame(trame) est une valeur constante "quelconque", qui permet de retrouver le début des frames si on est complètement perdu (je prends souvent 42 ou 0x42, mais n'importe quelle valeur pas trop utilisée par ailleurs est bien aussi.
- octet_longueur_de_la_frame : si les trames n'ont pas une longueur fixe, j'envois la longueur de la trame (dans le cas contraire, pas la peine)
- j'envois ensuite les données sous forme d'octets (nb : si j'ai besoin de nombres ne rentrant pas sur un octet, je sépare manuellement entre octet de poids fort et octet de poids faible, au cas où les deux ordinateurs/controleurs n'utiliseraient pas la même conventionà
- enfin, j'envois une checksum (somme module 256 ou xor), qui permet d'identifier les trames invalides