[C] Pb affichage de données hexa ds buffer

Résolu/Fermé
Thib42 Messages postés 12 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 31 juillet 2006 - 26 juil. 2006 à 15:04
Thib42 Messages postés 12 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 31 juillet 2006 - 26 juil. 2006 à 16:00
Bonjour tous le monde !

Je suis entrain de faire une application en C permettant la communication avec un GPS Bluetooth (j'utilise le port serie virtuel), et j'ai un soucis quand je cherche à afficher ou traiter les données que je recois.
Voila un bout de code qui explique le problème :

int nBytesRead,i;
char buffer[9];

                if(!ReadCOM(buffer, 9, &nBytesRead)) // Va recevoir nBytesRead octets (normalement 9) et les stocker dans buffer.
                    printf("Problème lecture.\r\n");
                
                printf("%d octets lus\n",nBytesRead);
                for (i=0; i < 9; i++)
                    printf("%.2X",buffer[i]);
                printf("\n");
                
                if (buffer[0] == 0xAA) printf("0xAA -> OK\n");
                else printf("0xAA -> KO\n");
                if (buffer[1] == 0x55) printf("0x55 -> OK\n");
                else printf("0x55 -> KO\n");
                if (buffer[8] == 0xCC) printf("0xCC -> OK\n");
                else printf("0xCC -> KO\n");


Je recois la trame suivante : [b]0xAA,0x55,0x02,0x00,0x47,0x00,0x47,0x33,0xCC[/b] (je verifie en direct sur un sniffer)
et le programme affiche le texte suivant :
9 octets lus
FFFFFFAA55020047004733FFFFFFCC
0xAA -> KO
0x55 -> OK
0xCC -> KO


Le compilateur gueule un peu aussi sur les comparaisons sur le premier et le dernier octets :
[Warning] comparison is always false due to limited range of data type 


Donc apparemment le premier et le dernier octet posent problème, une explication ? Pourquoi le premier et le dernier et pas les autres ??

Merci d'avance !

1 réponse

Thib42 Messages postés 12 Date d'inscription mardi 2 mai 2006 Statut Membre Dernière intervention 31 juillet 2006 1
26 juil. 2006 à 16:00
Problème résolu : il faut simplement utiliser du "unsigned char" à la place du "char".

char buffer[9];
devient
unsigned char buffer[9];
1