Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo utilizar printf para implementar las funciones de itoa?

¿Cómo utilizar printf para implementar las funciones de itoa?

Itoa es una función de extensión del lenguaje C no estándar ampliamente utilizada. Debido a que no es una función estándar del lenguaje C, no se puede utilizar en todos los compiladores. Sin embargo, la mayoría de los compiladores (como los de Windows) normalmente se ejecutan usando

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;

}

/*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

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.