Las funciones de conversión de tipos de datos sirven para crear un puente de unión entre los dos estilos de representación de números: la cadena de texto legible por los humanos y el formato binario legible por las máquinas. Las funciones de conversión son ideales para convertir argumentos de líneas de órdenes de su representación de cadena al formato interno
.
i atof() #include <math.h>
#include <stdlib.h> double atof(const char *cadena);
La función atof() convierte el argumento cadena en un valor de doble precisión. La cadena debe tener el siguiente formato:
[blanco][signo][ddd][.]]ddd][exponente][signo][ddd] opcional e/E
blancos o dígitos decimales tabulaciones
La conversión termina cuando aparece el primer carácter no reconocible o cuando se encuentra un carácter nul
o (
´\0´).
double x;
char *cad_dbl = “200-85”; ...
x = atof(cad_dbl); // convierte la cadena “200.85” a real Funciones relacionadas: atoi, atol, ecvt, fcvt, gcvt, scanf, strtod. i atoi #include <stdlib.h>
int atoi (const char *cadena)
La
función atoi()convierte el argumento cadena en un valor entero. La cadena debe tener el siguiente formato:[espacio en blanco][signo][ddd]
opcionalespacio o tabulación dígitos decimales
La conversión termina cuando se encuentra un carácter no reconocible (carácter nulo, ´\0´, punto decimal o una letra). Si no puede convertir la cadena devuelve nulo.
int i;
char *cad_ent =123; ...
i = atoi(cad_ent); // convierte la cadena “123” al entero 123 Funciones relacionadas: atof, atol, itoa, ltoa, scanf, ultoa.
i atol #include <stdlib.h>
long atol(const char *cadena);
Convierte el argumento cadena en un valor entero largo. La cadena debe tener el formato
:
[espacio en blanco][signo][ddd]opcional
blancos y tabulaciónes dígitos decimales
La conversión de caracteres de la cadena hasta que se encuentre el primer carácter no reconocible o el carácter nulo (´\0´).
long int i;
char cad_ent = “9876543”; ...
i = atol(cad_ent); // convierte cadena “9876543” a entero largo. Funciones relacionadas: atof, atoi, itoa, ltoa, scanf, strtod, strtol, strtoul, ultoa.
i ecvt #include <stdlib.h>
char *ecvt(double valor, int n, int *dec, int *signo);
La función ecvt() convierte un argumento de valor doble precisión en una cadena con n dígitos. Sivalortiene más de ndígitos, los dígitos inferiores se truncan
.
deces un puntero a un entero en donde se devuelve la posición del punto decimal;signoes un puntero a un entero donde se devuelve el signo (cero, positivo; en los restantes casos, negativo).p_buffer = ecvt(valor, exactitud, &dec, &signo);
Funciones relacionadas: atof, fcvt, gcvt, printf, sprintf, itoa, ltoa,
ultoa.i fcvt #include <stdlib.h>
char *fcvt(double valor, int n, int *dec, int *signo);
Al igual que la función ecvt
,
fcvt convierte el argumento valor de doble precisión en una cadena de n dígitos. Si el número de dígitos de valor excede a n,
el exceso de dígitos se trunca. Si hay menos dígitos quenla cadena se rellena con ceros. fcvt se diferencia deecvt en el modo de tratar los dígitos significativos.
ecvt() busca un número total de dígitos, mientras que fcvt()busca el número de dígitos a la derecha del puntero decimal.
cadena = fcvt(valor, extatitud, %oposición_d, &signo);
Funciones relacionadas: atof, ecvt, gcvt, itoa, ltoa, printf, sprintf, ultoa.
i gcvt #include <stdlib.h>
char *gcvt(double valor, int ndig, char, *buf);
La función gcvt() convierte el argumento valor de doble precisión en una cadena de caracteres que se almacena en el buffer cuya dirección se da en el argumento buf
.
Se debe asignar bastante espacio en el buffer para contener todos los dígitos de la cadena convertida y el carácter nulo de terminación (´\0´).gcvt(valor, digitos, cadena);
Funciones relacionadas: atof, ecvt, fcvt, itoa, ltoa, printf, sprintf, ultoa.
i itoa #include stdlib.h>
char *itoa(int valor, char *cad, int base);
La función itoa() convierte el argumento entero valor
en
una cadena de caracteres utilizando el argumento base,
como base de un sistema de numeración (2 a 36). Debe existir bastante espacio en cad para contener 17 caracteres,itoa() devuelve un puntero a la cadena cad.
itoa(32, buffer, 16); // buffer contensrá “20”, ya que 32 entero
// equivale a 20 en hexadecimal
Funciones relacionadas: ecvt, fcvt, gcvt, ltos, printf, sprintf, ultos.
i ltoa #include <stdlib.h>char *ltoa(long valor, char * cad, int base);
La funciónltoa()convierte el argumento entero largovaloren una cadena de caracteres que utiliza el argumento base como base de un sistema de numeración. Como un entero largo ocupa 32 bits en base 2, la cadena puede ocupar 33 bytes con el carácter nulo de terminación. Debe haber bastante espacio para contener 33 bytes
.
ltoa()devuelve un puntero acad.
long valor = 99288377L ltoa(valor, cadena, 30);
Funciones relacionadas: ecvt, fcvt, gcvt, printf, sprintf, ultoa.
i strtod #include stdlib.h>
double strtod(const char *cad, char **p);
La funciónstrtod()convierte la cadenacad en un valor de doble precisión. La cadena debe tener el formato
[blanco][signo][ddd][.][exponente][signo][ddd]
+, - d, D, e, E
blanco/ dígitos decimales tabulación
strtod() devuelve el valor de doble precisión y cero si no se produce la conversión. La conversión se termina con el primer carácter no reconocible
.
Aplicación: Convertir la cadena “843899.567” a un valor de coma flotantedouble
.
#include <stdio.h> #include <stdlib.h> main() { double x; char *num_flt = “843899.567”: char *p; x = strtod(num_flt, &p); printf(“x = %f\n”,x); }Funciones relacionadas
:
atof, scanf, strtol, strtoul.i strtol #include <stdlib.h>
long strtol(const char *cad, char **p, int b);
La función strtol() convierte una cadena cad en un valor entero largo. La cadena (puede contener hasta 33 caracteres) debe tener el formato:
[espacio en blanco][signo][0][x|X][ddd]
+, - dígitos decimales hexadecimal
La conversión se termina con el primer carácter no reconocible. Si se produce un error de desbordamiento (positivo o negativo) la variable errno se establece al valor de la mac
ro
ERANGE.
Convertir la cadena “9876” en valor entero
.
#include <stdio.h> #include <stdlib.h> main() { int base = 10; long int i; char *cad_ent = “9876”; char *ptrcad;i = strtol(cad_ent, &ptrcad, base); printf(“i = %ld\n”, i);
}
Funciones relacionadas: atol, ltoa, strtoul.
i strtoul #include <stdlib.h>
unsigned long strtoul(const char *cad, char **p, int base);
Convierte una cadena de caracteres a un entero largo sin signo en la base dada. La cadena debe tener el formato:
[espacio en blanco][0][x|X][ddd]
dígitos decimales octal
blanco o tabulaciones hexadecimal
Si la baseb
es cero,
strtoulutiliza el primer carácter de la cadena para determinar la base del valor.La cadena
cad puede contener hasta 33 caracteres, excluyendo el carácter de terminación nulo (´\0,). Si se produce un error de desbordamiento, la variable errno se pone al valor de ERANTE.
i = strtoul(cad_ent, &ptrfin, base);
Funciones relacionadas: atol, ultoa, strtol.
i ultoa #include <stdlib.h>
char *ultoa(unsigned long valor, char, *cad, int base);
La función ultoa() toma valor en base b (entre 2 y 36) y lo convierte en una cadena. Devuelve el puntero al principio de cad
.
No devuelve código de error. cad puede contener hasta 33 caracteres, excluyendo el carácter de terminación nulo (´\0´).Funciones relacionadas: itoa, ltoa.