String-Konvertierung und Formatierung¶
Funktionen zur Zahlenkonvertierung und formatierten Zeichenkettenausgabe.
-
int PyOS_snprintf(char *str, size_t size, const char *format, ...)¶
- Teil der Stable ABI.
Gibt nicht mehr als size Bytes an str gemäß der Formatzeichenkette format und den zusätzlichen Argumenten aus. Siehe die Unix-manpage snprintf(3).
-
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)¶
- Teil der Stable ABI.
Gibt nicht mehr als size Bytes an str gemäß der Formatzeichenkette format und der variablen Argumentenliste va aus. Unix-manpage vsnprintf(3).
PyOS_snprintf() und PyOS_vsnprintf() sind Wrapper für die Standard-C-Bibliotheksfunktionen snprintf() und vsnprintf(). Ihr Zweck ist es, ein konsistentes Verhalten in Eckfällen zu gewährleisten, was die Standard-C-Funktionen nicht tun.
Die Wrapper stellen sicher, dass str[size-1] bei der Rückgabe immer '\0' ist. Sie schreiben nie mehr als size Bytes (einschließlich des abschließenden '\0') in str. Beide Funktionen erfordern, dass str != NULL, size > 0, format != NULL und size < INT_MAX. Beachten Sie, dass dies bedeutet, dass es kein Äquivalent zu C99 n = snprintf(NULL, 0, ...) gibt, das die benötigte Puffergröße ermitteln würde.
Der Rückgabewert (rv) für diese Funktionen sollte wie folgt interpretiert werden:
Wenn
0 <= rv < size, war die Ausgabe-Konvertierung erfolgreich und rv Zeichen wurden nach str geschrieben (ohne das abschließende'\0'-Byte beistr[rv]).Wenn
rv >= size, wurde die Ausgabe-Konvertierung gekürzt und ein Puffer mitrv + 1Bytes wäre zum Erfolg erforderlich gewesen.str[size-1]ist in diesem Fall'\0'.Wenn
rv < 0, "ist etwas Schlimmes passiert".str[size-1]ist auch in diesem Fall'\0', aber der Rest von str ist undefiniert. Die genaue Ursache des Fehlers hängt von der zugrundeliegenden Plattform ab.
Die folgenden Funktionen bieten lokalisierungsunabhängige String-zu-Zahl-Konvertierungen.
-
unsigned long PyOS_strtoul(const char *str, char **ptr, int base)¶
- Teil der Stable ABI.
Konvertiert den Anfang der Zeichenkette in str in einen unsigned long-Wert gemäß der angegebenen base, die zwischen
2und36(einschließlich) liegen muss oder den speziellen Wert0hat.Führende Leerzeichen und Groß-/Kleinschreibung werden ignoriert. Wenn base Null ist, sucht es nach einem führenden
0b,0ooder0x, um die Basis zu bestimmen. Wenn diese fehlen, ist die Standardeinstellung10. Die Basis muss 0 oder zwischen 2 und 36 (einschließlich) sein. Wenn ptr nichtNULList, enthält es einen Zeiger auf das Ende des Scans.Wenn der konvertierte Wert den Bereich des entsprechenden Rückgabetyps verlässt, tritt ein Bereichsfehler auf (errno wird auf
ERANGEgesetzt) undULONG_MAXwird zurückgegeben. Wenn keine Konvertierung durchgeführt werden kann, wird0zurückgegeben.Siehe auch die Unix-manpage strtoul(3).
Hinzugefügt in Version 3.2.
-
long PyOS_strtol(const char *str, char **ptr, int base)¶
- Teil der Stable ABI.
Konvertiert den Anfang der Zeichenkette in str in einen long-Wert gemäß der angegebenen base, die zwischen
2und36(einschließlich) liegen muss oder den speziellen Wert0hat.Gleich wie
PyOS_strtoul(), gibt aber stattdessen einen long-Wert und bei ÜberläufenLONG_MAXzurück.Siehe auch die Unix-manpage strtol(3).
Hinzugefügt in Version 3.2.
-
double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)¶
- Teil der Stable ABI.
Konvertiert eine Zeichenkette s in ein double und löst bei einem Fehler eine Python-Ausnahme aus. Die Menge der akzeptierten Zeichenketten entspricht der Menge der Zeichenketten, die vom
float()-Konstruktor von Python akzeptiert werden, mit der Ausnahme, dass s keine führenden oder nachfolgenden Leerzeichen haben darf. Die Konvertierung ist unabhängig von der aktuellen Locale.Wenn endptr
NULList, wird die gesamte Zeichenkette konvertiert. LöstValueErroraus und gibt-1.0zurück, wenn die Zeichenkette keine gültige Darstellung einer Gleitkommazahl ist.Wenn endptr nicht
NULList, wird so viel wie möglich von der Zeichenkette konvertiert und*endptrwird so gesetzt, dass es auf das erste nicht konvertierte Zeichen zeigt. Wenn kein Anfangssegment der Zeichenkette die gültige Darstellung einer Gleitkommazahl ist, wird*endptrso gesetzt, dass es auf den Anfang der Zeichenkette zeigt, ValueError ausgelöst und-1.0zurückgegeben.Wenn s einen Wert darstellt, der zu groß ist, um ihn in einem Float zu speichern (z. B. ist
"1e500"auf vielen Plattformen eine solche Zeichenkette), dann gibt die FunktionPy_INFINITY(mit entsprechendem Vorzeichen) zurück und löst keine Ausnahme aus, wennoverflow_exceptionNULList. Andernfalls mussoverflow_exceptionauf ein Python-Ausnahmeobjekt zeigen; löst diese Ausnahme aus und gibt-1.0zurück. In beiden Fällen wird*endptrso gesetzt, dass es auf das erste Zeichen nach dem konvertierten Wert zeigt.Wenn bei der Konvertierung ein anderer Fehler auftritt (z. B. ein Speicherfehler), wird die entsprechende Python-Ausnahme ausgelöst und
-1.0zurückgegeben.Hinzugefügt in Version 3.1.
-
char *PyOS_double_to_string(double val, char format_code, int precision, int flags, int *ptype)¶
- Teil der Stable ABI.
Konvertiert einen double val in eine Zeichenkette unter Verwendung des angegebenen format_code, der precision und der flags.
format_code muss einer der Werte
'e','E','f','F','g','G'oder'r'sein. Für'r'muss die angegebene precision 0 sein und wird ignoriert. Der Formatcode'r'gibt das Standardformat vonrepr()an.flags können Null oder mehr der Werte
Py_DTSF_SIGN,Py_DTSF_ADD_DOT_0oderPy_DTSF_ALTsein, die miteinander verknüpft sind.Py_DTSF_SIGNbedeutet, dass der zurückgegebene String immer mit einem Vorzeichen versehen wird, auch wenn val nicht negativ ist.Py_DTSF_ADD_DOT_0bedeutet, dass sichergestellt wird, dass der zurückgegebene String nicht wie eine Ganzzahl aussieht.Py_DTSF_ALTbedeutet, dass „alternative“ Formatierungsregeln angewendet werden. Siehe die Dokumentation für den'#'-Spezifizierer vonPyOS_snprintf()für Details.
Wenn ptype nicht
NULList, dann wird der Wert, auf den er zeigt, auf einen der WertePy_DTST_FINITE,Py_DTST_INFINITEoderPy_DTST_NANgesetzt, was anzeigt, dass val eine endliche Zahl, eine unendliche Zahl oder keine Zahl ist.Der Rückgabewert ist ein Zeiger auf buffer mit der konvertierten Zeichenkette oder
NULL, wenn die Konvertierung fehlschlug. Der Aufrufer ist dafür verantwortlich, die zurückgegebene Zeichenkette durch Aufruf vonPyMem_Free()freizugeben.Hinzugefügt in Version 3.1.
-
int PyOS_stricmp(const char *s1, const char *s2)¶
Groß-/Kleinschreibungsunabhängiger Vergleich von Zeichenketten. Die Funktion funktioniert fast identisch wie
strcmp(), ignoriert aber die Groß-/Kleinschreibung.
-
int PyOS_strnicmp(const char *s1, const char *s2, Py_ssize_t size)¶
Groß-/Kleinschreibungsunabhängiger Vergleich von Zeichenketten. Die Funktion funktioniert fast identisch wie
strncmp(), ignoriert aber die Groß-/Kleinschreibung.