字符串转换与格式化¶
用于数字转换和格式化字符串输出的函数
-
int PyOS_snprintf(char *str, size_t size, const char *format, ...)¶
- Part of the Stable ABI.
根据格式字符串 format 和额外参数,输出不超过 size 个字节到 str。 参见 Unix 手册页面 snprintf(3)。
-
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)¶
- Part of the Stable ABI.
根据格式字符串 format 和变量参数列表 va,输出不超过 size 个字节到 str。 参见 Unix 手册页面 vsnprintf(3)。
PyOS_snprintf()
和 PyOS_vsnprintf()
包装 C 标准库函数 snprintf()
和 vsnprintf()
。它们的目的是保证在极端情况下的一致行为,而标准 C 的函数则不然。
The wrappers ensure that str[size-1]
is always '\0'
upon return. They
never write more than size bytes (including the trailing '\0'
) into str.
Both functions require that str != NULL
, size > 0
, format != NULL
and size < INT_MAX
. Note that this means there is no equivalent to the C99
n = snprintf(NULL, 0, ...)
which would determine the necessary buffer size.
这些函数的返回值( rv )应按照以下规则被解释:
当
0 <= rv < size
时,输出转换即成功并将 rv 个字符写入到 str (不包括末尾str[rv]
位置的'\0'
字节)。当
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.
Convert a string
s
to a double, raising a Python exception on failure. The set of accepted strings corresponds to the set of strings accepted by Python’sfloat()
constructor, except thats
must not have leading or trailing whitespace. The conversion is independent of the current locale.如果
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 Stable ABI.
Convert a double val to a string using supplied format_code, precision, and flags.
格式码 必须是以下其中之一,
'e'
,'E'
,'f'
,'F'
,'g'
,'G'
或者'r'
。对于'r'
, 提供的 精度 必须是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()
的工作方式相同,只是它忽略了大小写。