Spec-Zone.ru › C

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)

См. также

strtoimaxstrtoumax
(C99)(C99)
преобразует байтовую строку в intmax_t или uintmax_t
(функция)
wcstolwcstoll
(C95)(C99)
преобразует широкую строку в целочисленное значение
(функция)
wcstoulwcstoull
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API