Après avoir examiné diverses versions de itoa pour gcc, la version la plus souple que j'ai trouvée, capable de gérer les conversions en binaire, décimal et hexadécimal, tant positives que négatives, est la quatrième version qui se trouve à l'adresse suivante http://www.strudel.org.uk/itoa/ . Alors que sprintf
/ snprintf
ont des avantages, ils ne traiteront pas les nombres négatifs pour autre chose que la conversion décimale. Comme le lien ci-dessus est soit hors ligne, soit plus actif, j'ai inclus leur 4ème version ci-dessous :
/**
* C++ version 0.4 char* style "itoa":
* Written by Lukás Chmela
* Released under GPLv3.
*/
char* itoa(int value, char* result, int base) {
// check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; }
char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value;
do {
tmp_value = value;
value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
} while ( value );
// Apply negative sign
if (tmp_value < 0) *ptr++ = '-';
*ptr-- = '\0';
while(ptr1 < ptr) {
tmp_char = *ptr;
*ptr--= *ptr1;
*ptr1++ = tmp_char;
}
return result;
}
4 votes
printf
ou l'un de ses cousins devrait faire l'affaire1 votes
Duplicata possible de Où se trouve la fonction itoa dans Linux ?
1 votes
Vous pouvez également consulter cette FAQ sur la sérialisation, et peut-être les questions suivantes qui concernent la sérialisation en C : (a) , (b) , (c) pour atteindre votre intention réelle.
4 votes
Mon habituelle bête noire sémantique ici. Vous ne voulez pas convertir quoi que ce soit ; vous voulez obtenir une chaîne de caractères contenant une représentation (en base 10 ?) de la valeur de l'attribut
int
. Oui, je sais. C'est un raccourci très courant, mais ça m'énerve quand même.0 votes
Duplication possible de Convertir un int en string en c
1 votes
Pouvez-vous, s'il vous plaît, annuler la réponse actuelle et accepter la réponse la plus votée ?
itoa
n'est pas standard, doncsnprintf
est plus portable.