Перетворення та форматування рядків¶
Функції для перетворення чисел і виведення форматованого рядка.
-
int PyOS_snprintf(char *str, size_t size, const char *format, ...)¶
- Part of the Stable ABI.
Виводити не більше size байтів до str відповідно до рядка формату format і додаткових аргументів. Перегляньте сторінку довідки Unix snprintf(3).
-
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)¶
- Part of the Stable ABI.
Виводити не більше size байтів до str відповідно до рядка формату format і списку змінних аргументів va. Довідкова сторінка Unix vsnprintf(3).
PyOS_snprintf()
і PyOS_vsnprintf()
обгортають стандартні функції бібліотеки C snprintf()
і vsnprintf()
. Їх мета полягає в тому, щоб гарантувати послідовну поведінку в кутових випадках, чого немає у стандартних функціях C.
The wrappers ensure that str[size-1]
is always '\0'
upon return. They
never write more than size bytes (including the trailing '\0'
) into str.
Both functions require that str != NULL
, size > 0
, format != NULL
and size < INT_MAX
. Note that this means there is no equivalent to the C99
n = snprintf(NULL, 0, ...)
which would determine the necessary buffer size.
Повернене значення (rv) для цих функцій слід інтерпретувати таким чином:
Коли
0 <= rv < size
, вихідне перетворення було успішним і rv символи були записані в str (за винятком кінцевого байта'\0''
уstr[rv]
).Коли rv >= size, вихідне перетворення було скорочено, і для успіху знадобився буфер із rv + 1 байтами.
str[size-1]
у цьому випадку є'\0''
.Коли
rv < 0
, «сталося щось погане».str[size-1]
у цьому випадку також є'\0''
, але решта str не визначена. Точна причина помилки залежить від основної платформи.
Наступні функції забезпечують перетворення рядка в число, незалежне від локалі.
-
unsigned long PyOS_strtoul(const char *str, char **ptr, int base)¶
- Part of the Stable ABI.
Convert the initial part of the string in
str
to an unsigned long value according to the givenbase
, which must be between2
and36
inclusive, or be the special value0
.Leading white space and case of characters are ignored. If
base
is zero it looks for a leading0b
,0o
or0x
to tell which base. If these are absent it defaults to10
. Base must be 0 or between 2 and 36 (inclusive). Ifptr
is non-NULL
it will contain a pointer to the end of the scan.If the converted value falls out of range of corresponding return type, range error occurs (
errno
is set toERANGE
) andULONG_MAX
is returned. If no conversion can be performed,0
is returned.See also the Unix man page strtoul(3).
Нове в версії 3.2.
-
long PyOS_strtol(const char *str, char **ptr, int base)¶
- Part of the Stable ABI.
Convert the initial part of the string in
str
to an long value according to the givenbase
, which must be between2
and36
inclusive, or be the special value0
.Same as
PyOS_strtoul()
, but return a long value instead andLONG_MAX
on overflows.See also the Unix man page strtol(3).
Нове в версії 3.2.
-
double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)¶
- Part of the Stable ABI.
Convert a string
s
to a double, raising a Python exception on failure. The set of accepted strings corresponds to the set of strings accepted by Python’sfloat()
constructor, except thats
must not have leading or trailing whitespace. The conversion is independent of the current locale.Якщо
endptr
має значенняNULL
, перетворити весь рядок. ВикликайтеValueError
і повертайте-1.0
, якщо рядок не є дійсним представленням числа з плаваючою комою.Якщо endptr не дорівнює NULL, перетворіть якомога більшу частину рядка та встановіть
*endptr
так, щоб він вказував на перший неперетворений символ. Якщо жоден початковий сегмент рядка не є дійсним представленням числа з плаваючою комою, установіть*endptr
, щоб вказувати на початок рядка, викликайте ValueError і поверніть-1.0
.Якщо
s
представляє значення, яке є надто великим для зберігання в float (наприклад,"1e500"
є таким рядком на багатьох платформах), тодіoverflow_exception
має значенняNULL
повернітьPy_HUGE_VAL
(з відповідним знаком) і не встановлюйте винятків. В іншому випадкуoverflow_exception
має вказувати на об’єкт винятку Python; викликати цей виняток і повернути-1.0
. В обох випадках встановіть*endptr
, щоб вказувати на перший символ після перетвореного значення.Якщо під час перетворення виникає будь-яка інша помилка (наприклад, помилка браку пам’яті), установіть відповідний виняток Python і поверніть
-1.0
.Нове в версії 3.1.
-
char *PyOS_double_to_string(double val, char format_code, int precision, int flags, int *ptype)¶
- Part of the Stable ABI.
Convert a double val to a string using supplied format_code, precision, and flags.
format_code має бути одним із
'e'
,'E'
,'f'
,'F'
,'g'
,'G'
або'r''
. Для'r'
надана точність має бути 0 і ігнорується. Код формату'r'
визначає стандартний форматrepr()
.flags може мати нуль або більше значень
Py_DTSF_SIGN
,Py_DTSF_ADD_DOT_0
абоPy_DTSF_ALT
, або об’єднані разом:Py_DTSF_SIGN
означає, що перед поверненим рядком завжди ставиться знак, навіть якщо val є невід’ємним.Py_DTSF_ADD_DOT_0
означає, що повернутий рядок не буде виглядати як ціле число.Py_DTSF_ALT
означає застосування «альтернативних» правил форматування. Перегляньте документацію для специфікатораPyOS_snprintf()
'#''
для отримання детальної інформації.
Якщо ptype не є
NULL
, тоді значення, на яке він вказує, буде встановлено на одне зPy_DTST_FINITE
,Py_DTST_INFINITE
абоPy_DTST_NAN
, що означає, що val є кінцеве число, нескінченне число або не число відповідно.Поверненим значенням є вказівник на buffer із перетвореним рядком або
NULL
, якщо перетворення не вдалося. Виклик відповідає за звільнення повернутого рядка шляхом викликуPyMem_Free()
.Нове в версії 3.1.
-
int PyOS_stricmp(const char *s1, const char *s2)¶
Case insensitive comparison of strings. The function works almost identically to
strcmp()
except that it ignores the case.
-
int PyOS_strnicmp(const char *s1, const char *s2, Py_ssize_t size)¶
Case insensitive comparison of strings. The function works almost identically to
strncmp()
except that it ignores the case.