La función itoa en el lenguaje de programación C devuelve la notación posicional del entero especificado con la base dada (por ejemplo, el número 10 en base 7 se escribe como "13"). Esta función no está definida en ningún lenguaje C estándar, pero a menudo los compiladores la admiten mediante el uso del encabezado , ya que tiene un significado muy similar a la función de biblioteca estándar . <stdlib.h>atoi
void* itoa(int input, char *buffer, int radix)itoaacepta el entero pasado inputy devuelve su representación en el sistema numérico base radix(que debe tomar valores del 2 al 36). El alfabeto de salida consta de 36 caracteres: primero 10 números arábigos, luego 26 letras latinas estándar. El número resultante (una secuencia de dígitos base radix) se escribe en el búfer de salida buffer.
Dependiendo de la implementación, itoapuede devolver un puntero al primer carácter en el búfer buffer, o puede construirse para pasar un valor nulo , bufferlo que hace que la función devuelva la longitud de la cadena que se escribió en el buffer.
Para convertir un número en una cadena con base 8 (octal), 10 (decimal) o 16 ( hexadecimal ), una alternativa compatible con el estándar es usar una función de biblioteca estándarsprintf .
La función itoaapareció en la primera edición de El lenguaje de programación C de Brian Kernighan y Denis Ritchie , en la página 60. La segunda edición de El lenguaje de programación C ("K&R2") en la página 64 contenía la siguiente implementación . El libro señala varios problemas con esta implementación, incluido el hecho de que no puede manejar correctamente el número negativo más pequeño , −2 , la longitud de una palabra de máquina en bits-1 . [una]itoa
/* itoa: convierte n en caracteres en s */ void itoa ( int n , char s []) { int i , signo ; if (( signo = n ) < 0 ) /* escribir signo */ n = - n ; /* hacemos de n un número positivo */ yo = 0 _ do { /* generar números en orden inverso */ s [ i ++ ] = n % 10 + '0' ; /* obtener el siguiente dígito */ } while (( n /= 10 ) > 0 ); /* Eliminar */ si ( signo < 0 ) s [ i ++ ] = '-' ; s [ i ] = '\0' ; reverso ( s ); }Función reverseimplementada dos páginas antes:
#incluir <cadena.h> /* invertir: invertir la cadena s en su lugar */ anular el reverso ( caracteres [ ]) { int i , j ; carcter c ; for ( i = 0 , j = strlen ( s ) -1 ; i < j ; i ++ , j -- ) { c = s [ yo ]; s [ yo ] = s [ j ]; s [ j ] = c ; } }La función itoa(y una función similar ftoaque convierte números de punto flotante en una cadena) se enumera en la primera versión del manual de Unix . [2] A diferencia de las versiones anteriores, la versión de la biblioteca de Unix tenía una interfaz similar a
void itoa(int input, void (*subr)(char))y llamó a una rutina de devolución de llamada subr para cada carácter en la línea de salida, eliminando la necesidad de un gran búfer para almacenar toda la línea a la vez.