Преобразование и форматирование строк

Функции для преобразования чисел и вывода форматированной строки.

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 man page vsnprintf(3).

PyOS_snprintf() и PyOS_vsnprintf() оборачивают функции библиотеки Standard C snprintf() и vsnprintf(). Их назначение - гарантировать последовательное поведение в угловых случаях, чего не делают стандартные функции C.

Обертки гарантируют, что str[size-1] всегда будет '\0' при возврате. Они никогда не записывают в str более size байт (включая трейлинг '\0'). Обе функции требуют, чтобы str != NULL, size > 0, format != NULL и size < INT_MAX.

Возвращаемое значение (rv) для этих функций следует интерпретировать следующим образом:

  • Когда 0 <= rv < size, преобразование вывода было успешным, и символы rv были записаны в str (за исключением байта '\0' при str[rv]).

  • Когда rv >= size, выходное преобразование усекалось, и для успешной работы потребовался бы буфер с rv + 1 байтами. str[size-1] в данном случае является '\0'.

  • Когда rv < 0, «случилось что-то плохое». str[size-1] в этом случае тоже '\0', но остальная часть str не определена. Точная причина ошибки зависит от базовой платформы.

Следующие функции обеспечивают независимые от локали преобразования строк в числа.

double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)
Part of the Stable ABI.

Преобразовать строку s в double, при неудаче вызывая исключение Python. Набор принимаемых строк соответствует набору строк, принимаемых конструктором Python float(), за исключением того, что 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)
Part of the Stable ABI.

Преобразование double val в строку с использованием предоставленных форматного_кода, точности и флагов.

код_формата должен быть одним из 'e', 'E', 'f', 'F', 'g', 'G' или 'r'. Для 'r' заданная точность должна быть равна 0 и игнорируется. Код формата 'r' задает стандартный формат repr().

флаги могут быть нулем или более из значений 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(), за исключением того, что она игнорирует регистр.

Вернуться на верх