Konwersja i formatowanie ciągów znaków

funkcja do konwersji liczb i formatowania napis wyjście.

int PyOS_snprintf(char *str, size_t size, const char *format, ...)
Część stabilnego ABI.

Wyjście nie więcej niż size bajtów do str zgodnie z format napis format i ekstra argument. Zobacz stronę podręcznika Unix snprintf(3).

int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
Część stabilnego ABI.

Wyprowadzaj nie więcej niż size bajtów do str zgodnie z ciągiem format napis ującym format i listą argumentów zmiennych va. Strona podręcznika systemu Unix vsnprintf(3).

PyOS_snprintf() I PyOS_vsnprintf() owinąć Standardowe C biblioteka funkcja snprintf() I vsnprintf(). Ich celem jest zagwarantowanie spójnego zachowania w skrajnych przypadkach, czego nie zapewniają standardowe funkcje języka C.

Wraptory zapewniają, że str[size-1] zawsze jest to '\0' wartość zwracaćz. Nigdy nie zapisują więcej niż size bajtów (wliczając końcowy``»0»`` ) do str. Obie funkcja wymagają aby str != NULL, size > 0, format != NULL i size < INT_MAX. Należy pamiętać, że oznacza to brak odpowiednika C99 n = snprintf(NULL, 0, ...), który określałby wymagany rozmiar bufor size.

The zwracana wartość (rv) dla tych funkcja należy interpretować je następująco:

  • Gdy 0 <= rv < size, konwersja danych wyjściowych zakończyła się powodzeniem, a znaki rv znak zapisane w str (z wyłączeniem końcowego '\0' bajt o godz str[rv])

  • Gdy rv >= size, konwersja wyjściowa została skrócona, a bufor z rv + 1 bajtów byłoby potrzebnych do osiągnięcia sukcesu. str[size-1] w '\0' tym przypadku.

  • Gdy rv < 0, konwersja wyjściowa nie powiodła się i str[size-1] w '\0' W tym przypadku również, ale reszta str jest niezdefiniowana. Dokładna przyczyna błędu zależy od platformy bazowej.

Poniższe funkcje umożliwiają niezależną od ustawień regionalnych konwersję ciągów znaków na liczby.

unsigned long PyOS_strtoul(const char *str, char **ptr, int base)
Część stabilnego ABI.

Konwertuj początkową część ciągu napis na str do wartości unsigned long zgodnie z podanym base , który musi zawierać się pomiędzy 2 i 36 inkluzywny lub będący szczególną wartość, 0 .

Spacje wiodące i wielkość liter są znak ignorowane. Jeśli base jest zero, szuka wiodącego 0b, 0o lub 0x aby wskazać bazę. Jeżeli ich brakuje, domyślnie 10. Podstawa musi wynosić 0 lub mieścić się w przedziale od 2 do 36 (włącznie). Jeśli ptr jest różna od 0 NULL, będzie zawierać wskaźnik do końca skanowania.

Jeśli przekonwertowana wartość wykracza poza zakres odpowiedniego typu zwracać zwracanego, występuje błąd zakresu (errno jest ustawiony na ERANGE) i ULONG_MAX zwracana jest wartość. Jeśli nie można wykonać konwersji, 0 zwracana jest wartość .

patrz również the Unix man page strtoul(3).

Dodane w wersji 3.2.

long PyOS_strtol(const char *str, char **ptr, int base)
Część stabilnego ABI.

Konwertuj początkową część napis ciągu na str do long wartość zgodnie z podanym base, która musi być pomiędzy 2 i 36 włącznie, lub być wartość specjalną 0.

Taki sam jak PyOS_strtoul(), Ale zwracać A long wartość zamiast i LONG_MAX na przepełnieniach.

patrz również the Unix man page strtol(3).

Dodane w wersji 3.2.

double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)
Część stabilnego ABI.

Konwertuj ciąg napis s a double, rzucić a Python Wyjątek w przypadku błędu. Zestaw akceptowanych ciągów znaków odpowiada zestawowi ciągów znaków akceptowanych float`przez konstruktor Python ``s`(), z tym wyjątkiem, że nie mogą one zawierać spacji na początku ani na końcu. Konwersja jest niezależna od bieżącej lokalizacji.

Jeśli endptr jest NULL, przekonwertować cały napis. Rzucić ValueError I zwracać -1.0 jeśli napis nie jest ważny prawidłową reprezentacją liczby zmiennoprzecinkowej.

Jeśli endptr jest różny od NULL , konwertuj tak dużą część napis jak to możliwe *endptr, i ustaw wskaźnik na pierwszy nieprzekonwertowany znak. Jeżeli żaden początkowy segment napis nie jest prawidłową reprezentacją liczby zmiennoprzecinkowej, ustaw go tak *endptr, aby wskazywał na początek ciągu, zgłoś wyjątek ValueError i zwróć -1.0 .

If s represents a value that is too large to store in a float (for example, "1e500" is such a string on many platforms) then if overflow_exception is NULL return Py_HUGE_VAL (with an appropriate sign) and don’t set any exception. Otherwise, overflow_exception must point to a Python exception object; raise that exception and return -1.0. In both cases, set *endptr to point to the first character after the converted value.

Jeżeli podczas konwersji wystąpi jakikolwiek inny błąd (na przykład błąd braku pamięci), ustaw odpowiedni wyjątek Pythona i zwracać -1.0.

Dodane w wersji 3.1.

char *PyOS_double_to_string(double val, char format_code, int precision, int flags, int *ptype)
Część stabilnego ABI.

Konwertuje double val na napis ciąg znaków przy użyciu dostarczonych format_code, precision i flags.

format_code must be one of 'e', 'E', 'f', 'F', 'g', 'G' or 'r'. For 'r', the supplied precision must be 0 and is ignored. The 'r' format code specifies the standard repr() format.

flags can be zero or more of the following values or-ed together:

Py_DTSF_SIGN

Always precede the returned string with a sign character, even if val is non-negative.

Py_DTSF_ADD_DOT_0

Ensure that the returned string will not look like an integer.

Py_DTSF_ALT

Apply „alternate” formatting rules. See the documentation for the PyOS_snprintf() '#' specifier for details.

Py_DTSF_NO_NEG_0

Negative zero is converted to positive zero.

Dodane w wersji 3.11.

If ptype is non-NULL, then the value it points to will be set to one of the following constants depending on the type of val:

*ptype

type of val

Py_DTST_FINITE

finite number

Py_DTST_INFINITE

infinite number

Py_DTST_NAN

not a number

The return value is a pointer to buffer with the converted string or NULL if the conversion failed. The caller is responsible for freeing the returned string by calling PyMem_Free().

Dodane w wersji 3.1.

int PyOS_mystricmp(const char *str1, const char *str2)
int PyOS_mystrnicmp(const char *str1, const char *str2, Py_ssize_t size)
Część stabilnego ABI.

Porównywanie ciągów znaków bez uwzględniania wielkości napis liter. Funkcja te działają niemal identycznie strcmp() I strncmp() (odpowiednio), z tą różnicą, że ignorują wielkość liter znak ASCII.

Return 0 if the strings are equal, a negative value if str1 sorts lexicographically before str2, or a positive value if it sorts after.

W argumentach str1 lub str2 bajt NUL oznacza koniec ciągu. For PyOS_mystrnicmp(), Argument size podaje maksymalny rozmiar napis ciągu, tak jakby pod indeksem określonym przez size znajdowała się wartość NUL.

These functions do not use the locale.

int PyOS_stricmp(const char *str1, const char *str2)
int PyOS_strnicmp(const char *str1, const char *str2, Py_ssize_t size)

Porównywanie ciągów znaków bez uwzględniania wielkości napisnapis.

W systemie Windows są to odpowiednio alias stricmp() i strnicmp(), .

Na innych platformach są to odpowiednio alias PyOS_mystricmp() i PyOS_mystrnicmp() .

Klasyfikacja i znak konwersja postaci

Poniższe makra zapewniają niezależną od ustawień regionalnych (w przeciwieństwie do biblioteka standardowa C ctype.h) klasyfikację i konwersję znaków. Argument musi być znakiem lub znakiem char.

Py_ISALNUM(c)

Return true if the character c is an alphanumeric character.

Py_ISALPHA(c)

Return true if the character c is an alphabetic character (a-z and A-Z).

Py_ISDIGIT(c)

Return true if the character c is a decimal digit (0-9).

Py_ISLOWER(c)

Zwraca prawda wartość true, jeśli znak c jest małą literą ASCII (a-z).

Py_ISUPPER(c)

Zwraca prawda jeśli znak c to wielka litera ASCII (A-Z).

Py_ISSPACE(c)

Return true if the character c is a whitespace character (space, tab, carriage return, newline, vertical tab, or form feed).

Py_ISXDIGIT(c)

Return true if the character c is a hexadecimal digit (0-9, a-f, and A-F).

Py_TOLOWER(c)

Zwraca odpowiednik małej litery znak c.

Py_TOUPPER(c)

Zwraca odpowiednik wielkiej litery znak c.