Преобразование и форматирование строк
Функции для преобразования чисел и форматированного вывода строк.
-
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' при возвращении. Они никогда не записывают более size байт (включая завершающий '\0') в str. Обе функции требуют, чтобы 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 при ошибке. Множество допустимых строк соответствует множеству строк, принятых конструктором Pythonfloat(), за исключением того, что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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/conversion.html