¿Cómo utilizar printf para implementar las funciones de itoa?
char *itoa(int value, char *string, int radix);
Archivo de encabezado:
Ejemplo de programa:
# include ltstdlib.h gt
# include ltstdio.h gt
int main()
{
int número = 123456;
cadena de caracteres[25];
itoa(número, cadena, 10); ("integer = d string = s\n ", número, cadena);
Devuelve 0;
} p>
/*Código fuente para implementar la función itoa; */
char *myitoa(int num, char *str, int radix)
{
/*Tabla de índice*/
char index[]= " 0123456789 abcdefghijklmnopqrstuvwxyz ";
Unum sin signo/*Variable intermedia*
int i=0 , j, k
/*; Determine el valor de unum*/
if(radix = = 10 amp; ampnum lt0) /*Número decimal negativo*/
{
unum=( unsigned)-num;
str[i]= '-';
}
else unum=(unsigned)num/*Otra información*/
/*Orden inverso*/
Hacer {
str[i]=index[unum( unsigned) base];
unum /= base;
} while(unum);
str[I]= ' \ 0 ';
p>
/*Conversión* /
if(str[0]= = '-')k = 1; /*Número decimal negativo*/
De lo contrario k = 0 ;
/*Cambie el "/2" original a "/2.0" para garantizar que num esté entre 16 y 255 y que se pueda obtener el resultado correcto cuando la base sea igual a 16*/
for( j = k; j lt=(I-1)/2.0 k; j )
{
num = cadena[j];
cadena[j] ]= str[I-j-1 k];
str[I-j-1 k]= num;
}
Cadena de retorno;
}
El tercer parámetro de itoa se utiliza para convertir números a diferentes sistemas decimales.
Por ejemplo:
# include ltstdlib.h gt
# include ltstdio.h gt
int main(void)
{< / p>
int número = 12345;
char string[25];
itoa(number, string, 10); //Conversión decimal
>printf("integer = d string = s\n ", número, cadena);
itoa(número, cadena, 16); //Convierte según 16.
printf("entero = d cadena = s\n ", número, cadena
Devuelve 0;
}
); Resultado de salida:
entero = 12345 cadena = 12345 - La representación decimal de 12345 es 12345.
La representación hexadecimal de entero = 12345 cadena = 3039-12345 es 0x3039.
Sin embargo, cabe señalar que itoa no es una función estándar de C, es exclusiva de Windows. Si desea escribir un programa multiplataforma, utilice sprintf.
Expresémoslo en decimales :)
Ejemplo de MSDN
Ejemplo
/* ITOA. c: Este programa convierte varios números enteros
* en tamaños de cadenas de varios radios.
*/
# include ltstdlib.h gt
# include ltstdio.h gt
Administrador no válido (no válido)
{
Búfer de carga[20];
int i = 3445
Long l =-344115L;
Sin firmar long ul = 1234567890 ul;
_itoa(i, buffer, 10);
printf("Cadena de entero d (base 10): s\n ", I, buffer) ;
_itoa( i, buffer, 16);
printf ("Cadena de entero d (base 16): 0xs\n ", I, buffer);
_itoa(i,buffer,2);
printf("Cadena de entero d (base 2): s\n ",I,buffer);
_ltoa( l,buffer,16);
printf(" long int LD(radix 16) string): 0xs\n ",l,buffer);
_ultoa(ul, buffer, 16);
printf("Cadena larga sin firmar lu (base 16): 0xs\n ",ul, buffer);
}
Salida p>
Cadena entera 3445 (base 10): 3445
Cadena entera 3445 (base 16): 0xd75
Cadena entera 3445 (base 2): 11011110101
Cadena larga -344115 (base 16): 0x fffabbcd
Cadena larga sin firmar 1234567890 (base 16): 0x499602d2
Especifica la base de la base a convertir, su valor parece estar entre 1-36.
Esta no es una función de la biblioteca estándar de C, sino una extensión de la plataforma Windows. sprintf en la biblioteca estándar es más poderoso que esto y su uso es similar a printf:
char str[255];
sprintf(str, "x", 100); //will Convierte 100 en una cadena en notación hexadecimal.