NOMBRE¶
strtoul, strtoull, strtouq - convierten una cadena en un entero largo sin signo
SINOPSIS¶
#include <stdlib.h>
unsigned long int
strtoul(const char *nptr, char **endptr, int base);
unsigned long long int
strtoull(const char *nptr, char **endptr, int base);
DESCRIPCIÓN¶
La función
strtoul() convierte la parte inicial de la cadena
nptr en un valor entero largo sin signo de acuerdo con la
base
dada, la cual debe estar entre 2 y 36 inclusive, o ser el valor especial 0.
La cadena debe comenzar con una cantidad arbitraria de espacios en blanco
(determinado por
isspace(3)) y seguida por un opcional y único
signo `+' o `-'. Si
base es cero o 16, la cadena puede entonces incluir
un prefijo `0x' , y el número se leerá en base 16; en caso
contrario, una
base cero se toma como 10 (decimal) a menos que el
siguiente caracter sea `0', en cuyo caso se toma como 8 (octal).
El resto de la cadena se convierte en un valor entero largo sin signo de la
manera obvia, deteniéndose en el primer caracter que no sea un
dígito válido en la base dada. (En bases por encima de 10, la letra
`A' mayúscula o minúscula representa 10, `B' representa 11, y
así en adelante, con `Z' representando 35).
Si
endptr no es NULL,
strtoul() almacena la dirección del
primer caracter no válido en
*endptr. Si no hubiera dígitos
en absoluto
strtoul() almacena el valor original de
nptr en
*endptr. (y devuelve 0). En particular, si
*nptr es distinto de
`\0' pero
**endptr es `\0' a la vuelta, la cadena entera es
válida.
La función
strtoull() hace el mismo trabajo que la función
strtoul() pero devuelve un valor entero de tipo long long.
VALOR DEVUELTO¶
La función
strtoul() devuelve o el resultado de la conversión
o, si hubiera un signo menos delante, la negación del resultado de la
conversión, a menos que el valor original (no-negado) se hubiera
sobrepasado; en tal caso,
strtoul() devuelve ULONG_MAX y asigna ERANGE
a la variable global
errno. Precisamente lo mismo se aplica a
strtoull() (con ULLONG_MAX en lugar de ULONG_MAX).
ERRORES¶
- ERANGE
- El valor resultante está fuera de rango.
- EINVAL
- (no está en C99) La base dada contiene un valor
no soportado.
La implementación puede poner también
errno a
EINVAL en
caso de que no se realice ninguna conversión (no se encuentren
dígitos, y se devuelva 0).
OBSERVACIONES¶
En otras localizaciones distintas a la localización "C", se
pueden aceptar también otras cadenas. (Por ejemplo, el separador de miles
de la localización actual puede estar soportado.)
BSD tiene también la función
u_quad_t
strtouq(const char *nptr, char **endptr, int base);
con una definición completamente análoga. Dependiendo del tamaño
de palabra de la arquitectura actual, ésta puede ser equivalente a
strtoull() o a
strtoul().
strtoul() es conforme con SVID 3, BSD 4.3, ISO 9899 (C99) y POSIX, y
strtoull() es conforme con ISO 9899 (C99) y POSIX-2001.
VÉASE TAMBIÉN¶
atof(3),
atoi(3),
atol(3),
strtod(3),
strtol(3)