Преобразование строк и форматирование
Функции для преобразования чисел и форматированного вывода строк.
-
int PyOS_snprintf(char *str, size_t size, const char *format, ...) -
Часть стабильного ABI.
Выводит не более size байт в str в соответствии со строкой формата format и дополнительными аргументами. См. страницу руководства Unix snprintf(3).
-
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) -
Часть стабильного ABI.
Выводит не более size байт в str в соответствии со строкой формата format и списком переменных аргументов va. Страница руководства Unix vsnprintf(3).
PyOS_snprintf() и PyOS_vsnprintf() являются обёртками для функций стандартной библиотеки C snprintf() и vsnprintf(). Их назначение — гарантировать единообразное поведение в крайних случаях, для которых функции стандартной библиотеки C такого поведения не обеспечивают.
Обёртки гарантируют, что по возвращении str[size-1] всегда равно '\0'. Они никогда не записывают в str больше size байт (включая завершающий '\0'). Для обеих функций требуется, чтобы str != NULL, size > 0, format != NULL и size < INT_MAX. Обратите внимание: это означает, что аналога функции C99 n = snprintf(NULL, 0, ...), которая определяет необходимый размер буфера, нет.
Возвращаемое значение (rv) этих функций следует интерпретировать следующим образом:
- Если
0 <= rv < size, преобразование вывода выполнено успешно, и в str записано rv символов (без завершающего байта'\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) -
Часть стабильного ABI.
Преобразует начальную часть строки в
strв значение типа unsigned long согласно заданнойbase, которая должна быть в диапазоне от2до36включительно либо иметь специальное значение0.Начальные пробельные символы и регистр букв игнорируются. Если
baseравно нулю, функция ищет начальный0b,0oили0x, чтобы определить основание системы счисления. Если они отсутствуют, по умолчанию используется10. Основание должно быть равно 0 или находиться в диапазоне от 2 до 36 включительно. Еслиptrне равноNULL, оно будет содержать указатель на конец обработанной части строки.Если преобразованное значение выходит за пределы диапазона соответствующего возвращаемого типа, возникает ошибка диапазона (
errnoустанавливается вERANGE) и возвращаетсяULONG_MAX. Если выполнить преобразование невозможно, возвращается0.См. также страницу руководства Unix strtoul(3).
Добавлено в версии 3.2.
-
long PyOS_strtol(const char *str, char **ptr, int base) -
Часть стабильного ABI.
Преобразует начальную часть строки в
strв значение типа long согласно заданнойbase, которая должна быть в диапазоне от2до36включительно либо иметь специальное значение0.Работает так же, как
PyOS_strtoul(), но возвращает значение типа long и при переполнении возвращаетLONG_MAX.См. также страницу руководства Unix strtol(3).
Добавлено в версии 3.2.
-
double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception) -
Часть стабильного ABI.
Преобразует строку
sв значение типа double, возбуждая исключение Python в случае ошибки. Набор допустимых строк соответствует набору строк, принимаемых конструкторомfloat()в Python, за исключением того, чтоsне должна содержать начальные или конечные пробельные символы. Преобразование не зависит от текущей локали.Если
endptrравноNULL, преобразуется вся строка. Если строка не является допустимым представлением числа с плавающей точкой, возбуждаетсяValueErrorи возвращается-1.0.Если endptr не равно
NULL, преобразуется максимально возможная часть строки, а*endptrустанавливается так, чтобы указывать на первый непреобразованный символ. Если ни одна начальная часть строки не является допустимым представлением числа с плавающей точкой,*endptrустанавливается так, чтобы указывать на начало строки, возбуждается ValueError и возвращается-1.0.Если
sпредставляет значение, слишком большое для хранения в переменной типа float (например, на многих платформах такой строкой является"1e500"), то при условии, чтоoverflow_exceptionравноNULL, возвращаетсяPy_INFINITY(с соответствующим знаком), и исключение не возбуждается. В противном случае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) -
Часть стабильного ABI.
Преобразует значение типа double val в строку, используя заданные format_code, precision и flags.
format_code должен быть одним из
'e','E','f','F','g','G'или'r'. Для'r'заданное значение precision должно быть равно 0 и игнорируется. Код формата'r'задаёт стандартный форматrepr().flags может содержать ноль или несколько следующих значений, объединённых побитовой операцией ИЛИ:
-
Py_DTSF_SIGN -
Всегда добавлять знак перед возвращаемой строкой, даже если val неотрицательно.
-
Py_DTSF_ADD_DOT_0 -
Гарантировать, что возвращаемая строка не будет выглядеть как целое число.
-
Py_DTSF_ALT -
Применять правила «альтернативного» форматирования. Подробнее см. документацию по спецификатору
'#'функцииPyOS_snprintf().
-
Py_DTSF_NO_NEG_0 -
Отрицательный ноль преобразуется в положительный ноль.
Добавлено в версии 3.11.
Если ptype не равно
NULL, то значение, на которое оно указывает, будет установлено в одну из следующих констант в зависимости от типа val:*ptype
тип val
-
Py_DTST_FINITE
конечное число
-
Py_DTST_INFINITE
бесконечное число
-
Py_DTST_NAN
не число
Возвращаемое значение — указатель на buffer с преобразованной строкой или
NULLв случае ошибки преобразования. Вызывающий код должен освободить возвращённую строку, вызвавPyMem_Free().Добавлено в версии 3.1.
-
-
int PyOS_mystricmp(const char *str1, const char *str2) -
int PyOS_mystrnicmp(const char *str1, const char *str2, Py_ssize_t size) -
Часть стабильного ABI.
Сравнение строк без учёта регистра. Эти функции работают почти так же, как
strcmp()иstrncmp()(соответственно), за исключением того, что игнорируют регистр символов ASCII.Возвращает
0, если строки равны, отрицательное значение, если str1 лексикографически предшествует str2, или положительное значение, если следует за ним.В аргументах str1 или str2 байт NUL обозначает конец строки. Для
PyOS_mystrnicmp()аргумент size задаёт максимальный размер строки, как если бы по индексу size находился символ NUL.Эти функции не используют локаль.
-
int PyOS_stricmp(const char *str1, const char *str2) -
int PyOS_strnicmp(const char *str1, const char *str2, Py_ssize_t size) -
Сравнение строк без учёта регистра.
В Windows это псевдонимы
stricmp()иstrnicmp()соответственно.На других платформах это псевдонимы
PyOS_mystricmp()иPyOS_mystrnicmp()соответственно.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/conversion.html