Itoa fait masion: coversion entier 32 bit non signe vers chaine de caractere(unix/win32)

Contenu du snippet

permet la conversion d'un entier non signe 32 bits vers une une chaine de caractère ; la fonction est quasiment indisponible sous UNIX ( on a pas trouvé une alternative thread-safe apparemment), j'ai décidé d'implémenter mon propre code qui compile sous Win32/UNIX dont voila le prototype;

char *Uint32ToString(uint32_t NB,size_t *StrLen);

NB : l'entier non signe a convertir;
StrLen : ptr donnant la taille de la chaine de retour

Source / Exemple :


#ifdef _WIN32
typedef unsigned int uint32_t ;
typedef unsigned int size_t;
#else
#include <sys/types.h>
#endif
char *Uint32ToString(uint32_t NB,size_t *StrLen)
{
	 static char buf[32];
	unsigned char *s = (unsigned char *)(buf + sizeof(buf) - 1);

	if( StrLen ){

  • StrLen = 1;
} for(;;){ if( NB < 10 )break ; *s = ( NB % 10 ) + '0' ;*s--; if( StrLen ) { (*StrLen)++; } NB /= 10 ; }
  • s = NB + '0' ;
return s; } #include <stdio.h> int main() { size_t len; printf("%s ",Uint32ToString(655841,&len)); printf("taille %d\n",len); printf("%s\n",Uint32ToString(6584,NULL)); printf("%s\n",Uint32ToString(95783,NULL)); printf("%s\n",Uint32ToString(3267,NULL)); return 0; }

Conclusion :


le code n'est pa thread-safe sous UNIX puisque il retourne un ptr vers une chaine statique (static buf[]) , donc si quelqu'un a une idée d'alternative thread-safe ca serait génial.

A Vos Les Studios ==>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.