Itoa (C)

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 .

Implementación por Kernighan y Ritchie

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.

Véase también

Notas

  1. ↑ Para obtener una solución a este problema, consulte "Soluciones K&R2" Archivado el 3 de marzo de 2010 en Wayback Machine en clc-wiki.net .
  2. "Manual del programador de Unix" Archivado el 18 de mayo de 2008. , 3 de noviembre de 1971. Capítulo "Rutinas de biblioteca" Archivado desde el original el 9 de mayo de 2008. .

Enlaces