# Napis 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 cel jest zagwarantowanie spójnego zachowanie w skrajnych przypadkach, czego nie zapewniają Standardowe C funkcje języka C.

Wraptory zapewniają, że `str[size-1]` zawsze jest to `'\0'` wartość zwracać. 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 napis 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 napis 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 ważny prawidłową reprezentacją liczby zmiennoprzecinkowej, ustaw go tak `*endptr`, aby wskazywał na początek napis, rzucić zgłoś wyjątek ValueError i zwracać `-1.0` .

  Jeśli `s` reprezentować wartość który jest zbyt duży, aby go przechowywać w obiekcie typu float (na przykład, jest takim ciągiem napis na wielu platformach) to jeśli `overflow_exception` jest `NULL` zwracać `INFINITY`(z odpowiednim znakiem) i nie ustawiaj żadnego wyjątku. W, ``overflow_exception`` przeciwnym razie musi wskazywać na obiekt wyjątku Pythona; zgłoś ten rzucić wyjątek i zwracać `-1.0`. W obu przypadkach ustaw tak `*endptr`, aby wskazywał na pierwszy znak po przekonwertowanej wartośc.

  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 napis. For `PyOS_mystrnicmp()`, Argument size podaje maksymalny rozmiar napis ciągu, tak jakby pod indeks 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 napis.

  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 makro zapewniają niezależną od ustawień regionalnych (w przeciwieństwie do biblioteka standardowa C `ctype.h`) klasyfikację i konwersję znak. 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.