strtoimax, strtoumax
|
Definido en el encabezado
<inttypes.h>
|
||
|
intmax_t
strtoimax
(
const
char
*
restrict
nptr,
char ** restrict endptr, int base ) ; |
(1) | (desde C99) |
|
uintmax_t
strtoumax
(
const
char
*
restrict
nptr,
char ** restrict endptr, int base ) ; |
(2) | (desde C99) |
Interpreta un valor entero en una cadena de bytes apuntada por nptr .
Descarta cualquier carácter de espacio en blanco (identificado llamando a
isspace
) hasta encontrar el primer carácter que no sea un espacio, luego toma tantos caracteres como sea posible para formar una representación válida de número entero en
base-n
(donde n=
base
) y los convierte en un valor entero. El valor entero válido consta de las siguientes partes:
- (opcional) signo más o menos
-
(opcional)
prefijo (
0) que indica base octal (solo aplica cuando la base es 8 o 0 ) -
(opcional)
prefijo (
0xo0X) que indica base hexadecimal (solo aplica cuando la base es 16 o 0 ) - una secuencia de dígitos
El conjunto de valores válidos para base es
{0, 2, 3, ..., 36}
. El conjunto de dígitos válidos para enteros de base-
2
es
{0, 1}
, para enteros de base-
3
es
{0, 1, 2}
, y así sucesivamente. Para bases mayores que
10
, los dígitos válidos incluyen caracteres alfabéticos, comenzando desde
Aa
para enteros de base-
11
, hasta
Zz
para enteros de base-
36
. Se ignora la capitalización de los caracteres.
Se pueden aceptar formatos numéricos adicionales según la configuración regional de C actualmente instalada locale .
Si el valor de
base
es
0
, la base numérica se detecta automáticamente: si el prefijo es
0
, la base es octal, si el prefijo es
0x
o
0X
, la base es hexadecimal, de lo contrario la base es decimal.
Si el signo menos formaba parte de la secuencia de entrada, el valor numérico calculado a partir de la secuencia de dígitos se niega como si fuera mediante unary minus en el tipo resultante.
Las funciones establecen el puntero apuntado por endptr para que apunte al carácter posterior al último carácter interpretado. Si endptr es un puntero nulo, se ignora.
Si el nptr está vacío o no tiene la forma esperada, no se realiza ninguna conversión, y (si endptr no es un puntero nulo) el valor de nptr se almacena en el objeto apuntado por endptr .
Contenidos |
Parámetros
| nptr | - | puntero a la cadena de bytes terminada en nulo que se va a interpretar |
| endptr | - | puntero a un puntero a carácter |
| base | - | base del valor entero interpretado |
Valor de retorno
-
Si tiene éxito, se devuelve un valor entero correspondiente al contenido de
str. - Si el valor convertido excede el rango del tipo de retorno correspondiente, ocurre un error de rango (estableciendo errno a ERANGE ) y se devuelve INTMAX_MAX , INTMAX_MIN , UINTMAX_MAX o 0 , según corresponda.
- Si no se puede realizar ninguna conversión, se devuelve 0 .
Ejemplo
#include <errno.h> #include <inttypes.h> #include <stdio.h> #include <string.h> int main(void) { char* endptr = NULL; printf("%ld\n", strtoimax(" -123junk", &endptr, 10)); // base 10 printf("%ld\n", strtoimax("11111111", &endptr, 2)); // base 2 printf("%ld\n", strtoimax("XyZ", &endptr, 36)); // base 36 printf("%ld\n", strtoimax("010", &endptr, 0)); // octal auto-detection printf("%ld\n", strtoimax("10", &endptr, 0)); // decimal auto-detection printf("%ld\n", strtoimax("0x10", &endptr, 0)); // hexadecimal auto-detection // range error: LONG_MAX+1 --> LONG_MAX errno = 0; printf("%ld\n", strtoimax("9223372036854775808", &endptr, 10)); printf("%s\n", strerror(errno)); }
Salida:
-123 255 44027 8 10 16 9223372036854775807 Numerical result out of range
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 7.8.2.3 Las funciones strtoimax y strtoumax (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.8.2.3 Las funciones strtoimax y strtoumax (p: TBD)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.8.2.3 Las funciones strtoimax y strtoumax (p: 219)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.8.2.3 Las funciones strtoimax y strtoumax (p: 200)
Véase también
|
(C99)
(C99)
|
convierte una cadena ancha a
intmax_t
o
uintmax_t
(función) |
|
(C99)
|
convierte una cadena de bytes a un valor entero
(función) |
|
(C99)
|
convierte una cadena de bytes a un valor entero sin signo
(función) |
|
Documentación de C++
para
strtoimax
,
strtoumax
|
|