Spec-Zone.ru › C++

std::isxdigit

Определено в заголовке <cctype>
int isxdigit( int ch );

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

Поведение не определено, если значение ch не может быть представлено как unsigned char и не равно EOF.

Параметры

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

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

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

Примечания

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

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

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

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

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 <iostream>
 
int main()
{
    for (int c = 0; UCHAR_MAX >= c; ++c)
        if (isxdigit(c))
            std::cout << static_cast<char>(c);
    std::cout << '\n';
}

Вывод:

0123456789ABCDEFabcdef

См. также

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

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/w/cpp/string/byte/isxdigit

Spec-Zone.ru

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