| 12
 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