Преобразование строк и форматирование
Функции для преобразования чисел и форматированного вывода строк.
-
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_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) -
Часть стабильного 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,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) -
Сравнение строк без учёта регистра. Функция работает почти так же, как
strcmp(), но игнорирует регистр.
-
int PyOS_strnicmp(const char *s1, const char *s2, Py_ssize_t size) -
Сравнение строк без учёта регистра. Функция работает почти так же, как
strncmp(), но игнорирует регистр.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/conversion.html