Bonjour à la communauté,
J'ai ci-dessous une fonction que me sert à convertir une chaine hexadécimale (stringName) en chaine de caractère (o_cData).
0x00115660AEFF ===> "00115660AEFF"
Les caractères de la chaine héxa sont appelé deux à deux avant de remplir la nouvelle chaine avec un sscanf, et c'est la que ça coince.
Peut-être qu'un sprintf serait plus approprié ?
Pourriez-vous m'aider sur ce point ?
Cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 int fonction() { char *stringName = "0x00115660AEFF"; //Chaine de caractère d'entrée unsigned int nbDataSimuFile = 15; //Nombre de caractère de la chaine en comptant le caractère de fin int o_iNbDatas; //Nombre de caractère de la chaine de sortie unsigned char *o_cData; //Chaine de caractère de sortie int j = 0; //Permet de sélectionner l'emplacement dans la chaine de caractère de sortie o_cData = malloc (sizeof(char) * nbDataSimuFile - 2)); //Permet d'allouer de la mémoire à la chaine de sortie sans les deux premiers caractères if('0' == stringName[0] && 'x' == stringName[1]) { //Vérification que la chaine d'entrée soit bien en hexadécimale *o_iNbDatas = (nbDataSimuFile - 3) / 2; //Calcul du nombre de caractère de sortie o_cData = malloc (sizeof(char) * (*o_NbDatas)); //Nouvelle allocation mémoire pour la chaine de sortie for (int i; i < nbDataSimuFile - 1; i += 2) { //Boucle for pour cibler 2 termes par termes char temp[3]; temp[0] = stringName[i]; //Décomposition de l'information temp[1] = stringName[i + 1]; temp[2] = '\0'; sscanf((char*) o_cData[j], "%c%c", temp); //Remplissage de la chaine de sortie j += 2; } return 1; } else { return 0; } }
Bastien
Partager