wcstoimax, wcstoumax
Определено в заголовочном файле <inttypes.h> | ||
|---|---|---|
intmax_t wcstoimax( const wchar_t *restrict nptr,
wchar_t **restrict endptr, int base );
| (начиная с C99) | |
uintmax_t wcstoumax( const wchar_t *restrict nptr,
wchar_t **restrict endptr, int base );
| (начиная с C99) |
Интерпретирует целочисленное значение без знака в широкой строке, на которую указывает nptr.
Отбрасывает все пробельные символы (определяемые вызовом iswspace) до первого непробельного символа, затем считывает максимально возможное количество символов, образующих корректное представление целого числа без знака в системе счисления с основанием n (где n=base), и преобразует их в целочисленное значение. Корректное значение без знака состоит из следующих частей:
- (необязательно) знак плюс или минус
-
(необязательно) префикс (
0), указывающий на восьмеричную систему счисления (применяется только если основание равно8или0) -
(необязательно) префикс (
0xили0X), указывающий на шестнадцатеричную систему счисления (применяется только если основание равно16или0) - последовательность цифр
Допустимые значения основания: {0, 2, 3, ..., 36}. Допустимые цифры для целых чисел в системе счисления с основанием 2 — {0, 1}, с основанием 3 — {0, 1, 2} и так далее. Для оснований больше 10 допустимыми цифрами являются буквы латинского алфавита: от Aa для целого числа в системе счисления с основанием 11 до Zz для целого числа в системе счисления с основанием 36. Регистр символов не учитывается.
Текущая локаль C, установленная с помощью функции setlocale, может допускать дополнительные числовые форматы.
Если значение base равно 0, основание системы счисления определяется автоматически: если префикс — 0, используется восьмеричная система счисления; если префикс — 0x или 0X, используется шестнадцатеричная система счисления; в противном случае используется десятичная система счисления.
Если во входной последовательности был знак минус, числовое значение, вычисленное по последовательности цифр, меняет знак, как при применении унарного минуса в типе результата; при этом действуют правила циклического переполнения для целых чисел без знака.
Функции устанавливают указатель, на который указывает endptr, так, чтобы он указывал на широкий символ, следующий за последним интерпретированным символом. Если endptr — нулевой указатель, он игнорируется.
Параметры
| nptr | - | указатель на широкую строку, завершающуюся нулевым символом, которую необходимо интерпретировать |
| endptr | - | указатель на указатель на широкий символ. |
| base | - | основание системы счисления для интерпретируемого целочисленного значения |
Возвращаемое значение
Целочисленное значение, соответствующее содержимому str, в случае успеха. Если преобразованное значение выходит за пределы диапазона соответствующего типа результата, возникает ошибка диапазона и возвращается INTMAX_MAX, INTMAX_MIN, UINTMAX_MAX или 0, в зависимости от ситуации. Если преобразование невозможно, возвращается 0.
Пример
#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
int main(void)
{
wchar_t* endptr;
wprintf(L"%ld\n", wcstoimax(L" -123junk", &endptr, 10)); /* base 10 */
wprintf(L"%ld\n", wcstoimax(L"11111111", &endptr, 2)); /* base 2 */
wprintf(L"%ld\n", wcstoimax(L"XyZ", &endptr, 36)); /* base 36 */
wprintf(L"%ld\n", wcstoimax(L"010", &endptr, 0)); /* octal auto-detection */
wprintf(L"%ld\n", wcstoimax(L"10", &endptr, 0)); /* decimal auto-detection */
wprintf(L"%ld\n", wcstoimax(L"0x10", &endptr, 0)); /* hexadecimal auto-detection */
/* range error */
/* LONG_MAX+1 --> LONG_MAX */
errno = 0;
wprintf(L"%ld\n", wcstoimax(L"9223372036854775808", &endptr, 10));
wprintf(L"%s\n", strerror(errno));
}
Вывод:
-123 255 44027 8 10 16 9223372036854775807 Numerical result out of range
Ссылки
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.8.2.4 Функции wcstoimax и wcstoumax (стр. 220)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.8.2.4 Функции wcstoimax и wcstoumax (стр. 201)
См. также
|
(C99)(C99) | преобразует байтовую строку в intmax_t или uintmax_t (функция) |
|
(C95)(C99) | преобразует широкую строку в целочисленное значение (функция) |
|
(C95)(C99) | преобразует широкую строку в целочисленное значение без знака (функция) |
Документация C++ для wcstoimax, wcstoumax |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/string/wide/wcstoimax