wcstoul, wcstoull
|
Definido en el encabezado
<wchar.h>
|
||
|
unsigned
long
wcstoul
(
const
wchar_t
*
str,
wchar_t
**
str_end,
int
base
)
;
|
(desde C95)
(hasta C99) |
|
|
unsigned
long
wcstoul
(
const
wchar_t
*
restrict
str,
wchar_t ** restrict str_end, int base ) ; |
(desde C99) | |
|
unsigned
long
long
wcstoull
(
const
wchar_t
*
restrict
str,
wchar_t ** restrict str_end, int base ) ; |
(desde C99) | |
Interpreta un valor entero sin signo en la cadena ancha apuntada por
str
.
Descarta cualquier carácter de espacio en blanco (identificado llamando a
iswspace
) 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 sin signo en
base-n
(donde n=
base
) y los convierte a un valor entero. El valor entero sin signo 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 de resultado, lo cual aplica las reglas de wraparound para enteros sin signo.
La función establece el puntero apuntado por
str_end
para que apunte al carácter ancho después del último carácter interpretado. Si
str_end
es un puntero nulo, se ignora.
Contenidos |
Parámetros
| str | - | puntero a la cadena ancha terminada en nulo que se interpretará |
| str_end | - | puntero a un puntero a un carácter ancho. |
| base | - | base del valor entero interpretado |
Valor de retorno
Valor entero correspondiente al contenido de
str
en caso de éxito. Si el valor convertido excede el rango del tipo de retorno correspondiente, ocurre un error de rango y se retorna
ULONG_MAX
o
ULLONG_MAX
. Si no se puede realizar ninguna conversión,
0
es retornado.
Ejemplo
#include <stdio.h> #include <errno.h> #include <wchar.h> int main(void) { const wchar_t *p = L"10 200000000000000000000000000000 30 40"; printf("Parsing L'%ls':\n", p); wchar_t *end; for (unsigned long i = wcstoul(p, &end, 10); p != end; i = wcstoul(p, &end, 10)) { printf("'%.*ls' -> ", (int)(end-p), p); p = end; if (errno == ERANGE){ printf("range error, got "); errno = 0; } printf("%lu\n", i); } }
Salida:
Parsing '10 200000000000000000000000000000 30 40': '10' -> 10 ' 200000000000000000000000000000' -> range error, got 18446744073709551615 ' 30' -> 30 ' 40' -> 40
Referencias
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.29.4.1.2 Las funciones wcstol, wcstoll, wcstoul y wcstoull (p: 429-430)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.24.4.1.2 Las funciones wcstol, wcstoll, wcstoul y wcstoull (p: 375-376)
Véase también
|
(C99)
|
convierte una cadena de bytes a un valor entero sin signo
(función) |
|
(C95)
(C99)
|
convierte una cadena ancha a un valor entero
(función) |
|
Documentación de C++
para
wcstoul
,
wcstoull
|
|