Преобразование и форматирование строк¶
Функции для преобразования чисел и вывода форматированной строки.
-
int PyOS_snprintf(char *str, size_t size, const char *format, ...)¶
- Part of the Стабильный ABI.
Выведите в str не более size байт в соответствии со строкой формата format и дополнительными аргументами. Смотрите справочную страницу Unix snprintf(3).
-
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)¶
- Part of the Стабильный ABI.
Выведите не более размера байт в str в соответствии со строкой формата format и списком переменных аргументов va. Справочная страница Unix vsnprintf(3).
PyOS_snprintf() и PyOS_vsnprintf() заключают в себе стандартные функции библиотеки C snprintf() и vsnprintf(). Их цель - гарантировать согласованное поведение в сложных случаях, чего не делают стандартные функции языка Си.
Обертки гарантируют, что при возврате значение str[size-1] всегда будет равно '\0'. Они никогда не записывают в str больше размера байт (включая завершающий '\0'). Обе функции требуют, чтобы str != NULL, size > 0, format != NULL и size < INT_MAX. Обратите внимание, что это означает, что не существует эквивалента C99 n = snprintf(NULL, 0, ...), который определял бы необходимый размер буфера.
Возвращаемое значение (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 Стабильный ABI.
Преобразуйте начальную часть строки в
strв значение unsigned long в соответствии с заданным значениемbase, которое должно находиться в диапазоне от2до36включительно, или быть специальным значением0.Начальный пробел и расстановка символов игнорируются. Если
baseравно нулю, то выполняется поиск начального значения0b,0oили0x, чтобы указать, какое основание. Если они отсутствуют, то по умолчанию используется значение10. Значение Base должно быть равно 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)¶
- Part of the Стабильный 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)¶
- Part of the Стабильный ABI.
Преобразуйте строку
sв a double, вызывая исключение Python при сбое. Набор принятых строк соответствует набору строк, принимаемых конструктором Pythonfloat(), за исключением того, что вsне должно быть начальных или конечных пробелов. Преобразование не зависит от текущего языкового стандарта.Если
endptrравноNULL, преобразуйте всю строку целиком. ПоднимитеValueErrorи верните-1.0, если строка не является допустимым представлением числа с плавающей запятой.Если значение endptr не равно
NULL, преобразуйте как можно большую часть строки и установите значение*endptrтаким образом, чтобы оно указывало на первый непревращенный символ. Если ни один начальный сегмент строки не является допустимым представлением числа с плавающей запятой, установите*endptrтаким образом, чтобы оно указывало на начало строки, вызовите ValueError и верните-1.0.Если
sпредставляет собой значение, которое слишком велико для хранения в виде числа с плавающей запятой (например,"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 Стабильный ABI.
Преобразуйте a double val в строку, используя указанные format_code, precision и flags.
код формата_ должен быть одним из
'e','E','f','F','g','G'или'r'. Для'r'указанная точность должна быть равна 0 и игнорируется. Код формата'r'определяет стандартный форматrepr().флаги могут содержать ноль или более значений
Py_DTSF_SIGN,Py_DTSF_ADD_DOT_0, илиPy_DTSF_ALT, или-ed вместе: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 является конечным числом, бесконечным числом или не числом, соответственно.Возвращаемое значение является указателем на буфер с преобразованной строкой или
NULL, если преобразование завершилось неудачно. Вызывающий объект отвечает за освобождение возвращаемой строки, вызываяPyMem_Free().Добавлено в версии 3.1.
-
int PyOS_stricmp(const char *s1, const char *s2)¶
Сравнение строк без учета регистра. Функция работает почти так же, как:c:func:!strcmp, за исключением того, что она игнорирует регистр.
-
int PyOS_strnicmp(const char *s1, const char *s2, Py_ssize_t size)¶
Сравнение строк без учета регистра. Функция работает почти так же, как:c:func:!strncmp, за исключением того, что она игнорирует регистр.