Bonjour,

Je suis débutant en C, et je voudrais comprendre ce code...
Merci d'avance

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
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); 
}