Comment convertir un partie d'un chat en decimal

Bonjour à tous,

J'utilise un SIM900 et Arduino Mini Pro pour collecter les CellID de ma région
J'utilise la commande AT+CENG=3.

Ca fonction et je retourne le résultat dans un char

0,228,03,1771,2d6f,55,62

MNC= 03
MCC = 228
LAC = 1771
Cellid = 2d6f.

Quand j'envoie ces données sur le site OpenCellid, il me retourne une erreur.

J'ai remarqué que LAC et CellID sont en HEXA et si je coverti ces dernier en décimal, le site me retourne une bonne valeur

Mon problème est comment je peux remplacer ces deux valeur par son équivalence en décimal.

Ma premeire question, comment je peux convertir 1771 et 2d6f en décimal, qui sont en fait un char??

Milles mercis pour votre aide

Bonjour,

Pour convertir un string hex en nombre, tu peux utiliser les fonctions strtol ( voir aussi strtoul ) ou sscanf

Pour convertir ce nombre en string, tu peux utiliser les fonctions itoa ou sprintf

Est-ce que LAC ou CellID pourraient être des valeurs négatives ?

Pour info, LAC et CellID ne sont pas des char.
Un char est codé sur 8 bits soit une valeur qui va de 0 à 255 (pour un unsigned char) et -128 à +127 pour un char.
Les valeurs que tu cherches à convertir sont des int. Ou des unsigned int si elles sont sensées être toujours positives.

Hello,
Je vous remercie pour vos réponses.
Je m'excuse, j'ai pas été assez explicite.

En fait que je lance la commande AT+CENG=3, le Serial lit ceci

0,228,03,1771,2d6f,55,62

qui est stocké dans mon buffer de type char.

Comme je l'ai écris plus haut, quand je met ceci

il me retourne une erreur, mais quand je converti 1771 et 2d6f de Hexe en decimal
et que je remplace ainsi

Le site m'affiche la juste position.

Donc je pense que 1771 et 2d5f sont en fait des hex.

Si je ne em trompe pas, il faudrait que je cange ceci

0,228,03,1771,2d6f,55,62

en

0,228,03,6001,11631,55,62

Il faudrait que j'extrait de ma chaine de caractere, 1771 et 2d6f (qui sont la valeur hexa), que je convertisse ceci en décimal et que je le reconvertisse en char pour que mon buffer (char buffer[200]) soit au final

0,228,03,6001,11631,55,62

Chais comme par exemple

convertToChar(convertToInt(0x1171));
convertToChar(convertToInt(0x2b6f));

Voyez-vous? M'avez-vous compris?

J’ai très bien compris ton problème depuis le début… ma réponse reste valide.

Voici un exemple avec sscanf: http://ideone.com/rfSckV
Voici un exemple avec strtok et strtol: http://ideone.com/uti218
Voici un exemple avec uniquement strtol: http://ideone.com/JzchXX

Tu devrais poster ton code, surtout la partie où tu envoie les données au site…

okok guix, merci
J'ai résolu mon problème comme ceci

char valStg[10];
    long val = strtoul(get_val,NULL,16);
    sprintf(valStg, "%ld", val);