std:: atoi, std:: atol, std:: atoll
|
Definiert im Header
<cstdlib>
|
||
|
int
atoi
(
const
char
*
str
)
;
|
(1) | |
|
long
atol
(
const
char
*
str
)
;
|
(2) | |
|
long
long
atoll
(
const
char
*
str
)
;
|
(3) | (seit C++11) |
Interpretiert einen ganzzahligen Wert in der Byte-Zeichenkette, auf die str zeigt. Die implizite Basis ist immer 10.
Verwirft alle Leerzeichen, bis das erste Nicht-Leerzeichen gefunden wird, nimmt dann so viele Zeichen wie möglich, um eine gültige Ganzzahldarstellung zu bilden, und wandelt sie in einen ganzzahligen Wert um. Der gültige ganzzahlige Wert besteht aus den folgenden Teilen:
- (optional) Plus- oder Minuszeichen
- numerische Ziffern
Wenn der Wert des Ergebnisses nicht dargestellt werden kann, d.h. der konvertierte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Parameter
| str | - | Zeiger auf die nullterminierte Byte-Zeichenkette, die interpretiert werden soll |
Rückgabewert
Integer-Wert entsprechend dem Inhalt von str bei Erfolg.
Wenn keine Konvertierung durchgeführt werden kann, 0 wird zurückgegeben.
Mögliche Implementierung
template<typename T> T atoi_impl(const char* str) { while (std::isspace(static_cast<unsigned char>(*str))) ++str; bool negative = false; if (*str == '+') ++str; else if (*str == '-') { ++str; negative = true; } T result = 0; for (; std::isdigit(static_cast<unsigned char>(*str)); ++str) { int digit = *str - '0'; result *= 10; result -= digit; // Berechnung in Negativen zur Unterstützung von INT_MIN, LONG_MIN,.. } return negative ? result : -result; } int atoi(const char* str) { return atoi_impl<int>(str); } long atol(const char* str) { return atoi_impl<long>(str); } long long atoll(const char* str) { return atoi_impl<long long>(str); } |
Tatsächliche C++-Bibliotheksimplementierungen greifen auf C-Bibliotheksimplementierungen von
atoi
,
atoil
und
atoll
zurück, die es entweder direkt implementieren (wie in
MUSL libc
) oder an
strtol
/
strtoll
delegieren (wie in
GNU libc
).
Beispiel
#include <cstdlib> #include <iostream> int main() { const auto data = { "42", "0x2A", // behandelt als "0" und Junk "x2A", nicht als hexadezimal "3.14159", "31337 with words", "words and 2", "-012345", "10000000000" // Hinweis: außerhalb des int32_t-Bereichs }; for (const char* s : data) { const int i{std::atoi(s)}; std::cout << "std::atoi('" << s << "') is " << i << '\n'; if (const long long ll{std::atoll(s)}; i != ll) std::cout << "std::atoll('" << s << "') is " << ll << '\n'; } }
Mögliche Ausgabe:
std::atoi('42') is 42
std::atoi('0x2A') is 0
std::atoi('3.14159') is 3
std::atoi('31337 with words') is 31337
std::atoi('words and 2') is 0
std::atoi('-012345') is -12345
std::atoi('10000000000') is 1410065408
std::atoll('10000000000') is 10000000000
Siehe auch
|
(C++11)
(C++11)
(C++11)
|
wandelt eine Zeichenkette in eine vorzeichenbehaftete Ganzzahl um
(Funktion) |
|
(C++11)
(C++11)
|
wandelt eine Zeichenkette in eine vorzeichenlose Ganzzahl um
(Funktion) |
|
(C++11)
|
wandelt eine Byte-Zeichenkette in einen Ganzzahlwert um
(Funktion) |
|
(C++11)
|
wandelt eine Byte-Zeichenkette in einen vorzeichenlosen Ganzzahlwert um
(Funktion) |
|
(C++11)
(C++11)
|
wandelt eine Byte-Zeichenkette in
std::intmax_t
oder
std::uintmax_t
um
(Funktion) |
|
(C++17)
|
wandelt eine Zeichenfolge in einen Ganzzahl- oder Gleitkommawert um
(Funktion) |
|
C-Dokumentation
für
atoi
,
atol
,
atoll
|
|