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 37 38 39 40 41 42 43 44 45 46 47 48 49
| void Chaine_convertirEntierEnChaine(char* dest, int valeur, int base) {
int digit;
/* Allocation d'un tableau temporaire qui contiendra la chaîne résultat.
* On la remplira en partant de la fin.
* On positionne dont le pointeur ptr sur le dernier élément de ce tableau,
* dans lequel on place le zéro de fin de chaîne.
*
* On alloue 33 octets : si le nombre doit être mis en forme en base 2, il faudra
* au plus 32 caractères pour le représenter (1 caractère par bit)
* + 1 octet pour le zéro terminal. */
char tmp[33];
char* ptr = &tmp[32];
*ptr = 0; // ICI, Je ne comprends ce qu'il fait
/* En base 10, un nombre négatif est noté avec un signe '-',
* suivi de la valeur absolue du nombre */
if(base == 10 && valeur < 0) {
valeur = -valeur;
*dest = '-'; // ICI, Je ne comprends ce qu'il fait
dest++; // ICI, Je ne comprends ce qu'il fait
}
/* La conversion s'effectue par divisions successives.
* A chaque tour de boucle, on extrait un nouveau digit du nombre.
* La progression se fait du digit le moins significatif au plus significatif. */
do {
/* Les digits sont obtenus par divisions successives du nombre à convertir
* par la base de conversion */
digit = (unsigned)valeur % base;
valeur = (unsigned)valeur / base;
/* La chaîne destination se remplit en partant de la fin.
* Avant d'insérer un nouveau digit, on recule le pointeur d'une position. */
--ptr;
/* Si le digit est compris entre 0 et 9, on insère le code ASCII du caractère correspondant,
* sinon, on insère le code ASCII d'une lettre */
if(digit < 10)
*ptr = digit + '0'; // ICI, Je ne comprends ce qu'il fait
else
*ptr = digit - 10 + 'A'; // ICI, Je ne comprends ce qu'il fait
/* La conversion se poursuit jusqu'à ce que le nombre à convertir soit nul */
} while(valeur != 0);
/* Pour finit, on copie la chaîne temporaire à l'adresse destination */
Chaine_copier(dest, ptr);
} |
Partager