Namespaces
Variants

std:: isxdigit

From cppreference.net
Definiert im Header <cctype>
int isxdigit ( int ch ) ;

Prüft, ob das gegebene Zeichen ein hexadezimales numerisches Zeichen ist ( 0123456789ABCDEFabcdef ).

Das Verhalten ist undefiniert, wenn der Wert von ch nicht als unsigned char darstellbar ist und nicht gleich EOF ist.

Inhaltsverzeichnis

Parameter

ch - zu klassifizierendes Zeichen

Rückgabewert

Ein Wert ungleich Null, wenn das Zeichen ein hexadezimales numerisches Zeichen ist, andernfalls Null.

Hinweise

std::isdigit und std::isxdigit sind die einzigen Standard-Funktionen zur Klassifizierung schmaler Zeichen, die nicht von der aktuell installierten C-Locale beeinflusst werden. Obwohl einige Implementierungen (z.B. Microsoft im 1252-Codepage) zusätzliche Ein-Byte-Zeichen als Ziffern klassifizieren können.

Wie alle anderen Funktionen aus <cctype> ist das Verhalten von std::isxdigit undefiniert, wenn der Wert des Arguments weder als unsigned char darstellbar noch gleich EOF ist. Um diese Funktionen sicher mit einfachen char s (oder signed char s) zu verwenden, sollte das Argument zuerst in unsigned char konvertiert werden:

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

Ebenso sollten sie nicht direkt mit Standardalgorithmen verwendet werden, wenn der Werttyp des Iterators char oder signed char ist. Konvertieren Sie stattdessen den Wert zunächst zu unsigned char :

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

Beispiel

#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';
}

Ausgabe:

0123456789ABCDEFabcdef

Siehe auch

prüft, ob ein Zeichen von einem Gebietsschema als hexadezimale Ziffer klassifiziert wird
(Funktionsschablone)
prüft, ob ein Breitzeichen ein hexadezimales Zeichen ist
(Funktion)
C-Dokumentation für isxdigit
**Anmerkung:** - Die Zahlenbereiche (71–90) und Bindestriche wurden beibehalten, da sie numerische Werte darstellen - Alle ` `-Blöcke wurden nicht übersetzt (hexadezimale/oktale Zeichencodes und Buchstabenfolgen) - Die mathematischen Symbole (≠0) wurden nicht übersetzt - HTML-Tags und Attribute bleiben unverändert - Die Tabellenstruktur und Formatierung wurde exakt beibehalten
ASCII-Werte Zeichen

iscntrl
iswcntrl

isprint
iswprint

isspace
iswspace

isblank
iswblank

isgraph
iswgraph

ispunct
iswpunct

isalnum
iswalnum

isalpha
iswalpha

isupper
iswupper

islower
iswlower

isdigit
iswdigit

isxdigit
iswxdigit

Dezimal Hexadezimal Oktal
0–8 \x0 \x8 \0 \10 Steuerzeichen ( NUL , etc.) ≠0 0 0 0 0 0 0 0 0 0 0 0
9 \x9 \11 Tabulator ( \t ) ≠0 0 ≠0 ≠0 0 0 0 0 0 0 0 0
10–13 \xA \xD \12 \15 Leerzeichen ( \n , \v , \f , \r ) ≠0 0 ≠0 0 0 0 0 0 0 0 0 0
14–31 \xE \x1F \16 \37 Steuerzeichen ≠0 0 0 0 0 0 0 0 0 0 0 0
32 \x20 \40 Leerzeichen 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 Rücklöschtaste ( DEL ) ≠0 0 0 0 0 0 0 0 0 0 0 0