Spec-Zone.ru › C++

std::isxdigit

Определён в заголовочном файле <cctype>
int isxdigit( int ch );

Проверяет, является ли заданный символ шестнадцатеричной цифрой (0123456789ABCDEFabcdef).

Поведение не определено, если значение ch нельзя представить типом unsignedchar и оно не равно EOF.

Параметры

ch - символ для классификации

Возвращаемое значение

Ненулевое значение, если символ является шестнадцатеричной цифрой, и ноль в противном случае.

Примечания

std::isdigit и std::isxdigit — единственные стандартные функции классификации узких символов, на которые не влияет текущая установленная локаль C, хотя некоторые реализации (например, Microsoft в кодовой странице 1252) могут классифицировать дополнительные однобайтовые символы как цифры.

Как и для всех остальных функций из <cctype>, поведение std::isxdigit не определено, если значение аргумента нельзя представить типом unsignedchar и оно не равно EOF. Чтобы безопасно использовать эти функции с обычными символами char (или signedchar), аргумент сначала следует преобразовать к типу unsignedchar:

bool my_isxdigit(char ch)
{
    return std::isxdigit(static_cast<unsigned char>(ch));
}

Аналогично, их не следует напрямую использовать со стандартными алгоритмами, если тип значения итератора — char или signedchar. Вместо этого сначала преобразуйте значение к типу unsignedchar:

int count_xdigits(const std::string& s)
{
    return std::count_if(s.begin(), s.end(),
                      // static_cast<int(*)(int)>(std::isxdigit)         // wrong
                      // [](int c){ return std::isxdigit(c); }           // wrong
                      // [](char c){ return std::isxdigit(c); }          // wrong
                         [](unsigned char c){ return std::isxdigit(c); } // correct
                        );
}

Пример

#include <cctype>
#include <climits>
#include <cstdio>
 
int main()
{
    for (int c = 0; c <= UCHAR_MAX; ++c)
        if (std::isxdigit(c))
            std::putchar(c);
    std::putchar('\n');
}

Вывод:

0123456789ABCDEFabcdef

См. также

isxdigit(std::locale)
проверяет, классифицируется ли символ локалью как шестнадцатеричная цифра
(шаблон функции)
iswxdigit
проверяет, является ли широкий символ шестнадцатеричным символом
(функция)
Документация по C для isxdigit
Значения ASCII символы

iscntrl
iswcntrl

isprint
iswprint

isspace
iswspace

isblank
iswblank

isgraph
iswgraph

ispunct
iswpunct

isalnum
iswalnum

isalpha
iswalpha

isupper
iswupper

islower
iswlower

isdigit
iswdigit

isxdigit
iswxdigit

десятичное шестнадцатеричное восьмеричное
0–8 \x0–\x8 \0–\10 управляющие коды (NUL и т. д.) ≠0 0 0 0 0 0 0 0 0 0 0 0
9 \x9 \11 табуляция (\t) ≠0 0 ≠0 ≠0 0 0 0 0 0 0 0 0
10–13 \xA–\xD \12–\15 пробельные символы (\n, \v, \f, \r) ≠0 0 ≠0 0 0 0 0 0 0 0 0 0
14–31 \xE–\x1F \16–\37 управляющие коды ≠0 0 0 0 0 0 0 0 0 0 0 0
32 \x20 \40 пробел 0 ≠0 ≠0 ≠0 0 0 0 0 0 0 0 0
33–47 \x21–\x2F \41–\57 !"#$%&'()*+,-./ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
48–57 \x30–\x39 \60–\71 0123456789 0 ≠0 0 0 ≠0 0 ≠0 0 0 0 ≠0 ≠0
58–64 \x3A–\x40 \72–\100 :;<=>?@ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
65–70 \x41–\x46 \101–\106 ABCDEF 0 ≠0 0 0 ≠0 0 ≠0 ≠0 ≠0 0 0 ≠0
71–90 \x47–\x5A \107–\132 GHIJKLMNOP
QRSTUVWXYZ
0 ≠0 0 0 ≠0 0 ≠0 ≠0 ≠0 0 0 0
91–96 \x5B–\x60 \133–\140 [\]^_` 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
97–102 \x61–\x66 \141–\146 abcdef 0 ≠0 0 0 ≠0 0 ≠0 ≠0 0 ≠0 0 ≠0
103–122 \x67–\x7A \147–\172 ghijklmnop
qrstuvwxyz
0 ≠0 0 0 ≠0 0 ≠0 ≠0 0 ≠0 0 0
123–126 \x7B–\x7E \172–\176 {|}~ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
127 \x7F \177 символ забоя (DEL) ≠0 0 0 0 0 0 0 0 0 0 0 0

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/byte/isxdigit

Spec-Zone.ru

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