snprintf(buffer, 33, "%X", i);
%X pour de l'hexa en majuscules
%x pour de l'hexa en minuscules
La seule base "commune" que ne permettent pas sprintf() et ses soeurs, c'est le binaire.
Version imprimable
snprintf(buffer, 33, "%X", i);
%X pour de l'hexa en majuscules
%x pour de l'hexa en minuscules
La seule base "commune" que ne permettent pas sprintf() et ses soeurs, c'est le binaire.
Question bête : elle sert à quoi la fonction itoa ? Si c'est pour convertir en entier en base N, j'ai ça qui traine :
string doit être assez grand mais il doit être assez simple d'allouer la chaîne à l'intérieur de la fonction (si tu y arrive, le résultat m'interesse ;))Code:
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 char *itoa(int value, char *string, int radix) { char tmp[32]; char *tp = tmp; int i; unsigned v; int sign; char *sp; if (radix > 36 || radix <= 1) return 0; sign = (radix == 10 && value < 0); if (sign) v = -value; else v = (unsigned)value; while (v || tp == tmp) { i = v % radix; v = v / radix; if (i < 10) *tp++ = i+'0'; else *tp++ = i + 'A' - 10; } sp = string; if (sign) *sp++ = '-'; while (tp > tmp) *sp++ = *--tp; *sp = 0; return string; }
Désolé pour le retard :oops:
Pour l'avoir en entier il suffit de mettre d a la place de x comme dans ceci :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <stdio.h> #include <stdlib.h> int main () { char i=80; char buffer[33]; printf ("Avant itoa %d\n",i); snprintf(buffer, 33, "%d", i); printf ("Apres itoa %s\n",buffer); system ("pause"); return 0; }
Si je ne me trompe pas la formule qui donne la taille de la chaîne est len = (int)(ln(value)/ln(radix)) + 2.Citation:
Envoyé par gege2061
ln est le log népérien. +2 pour mettre le zéro terminal.