字符串转换与格式化¶
用于数字转换和格式化字符串输出的函数
-
int PyOS_snprintf(char *str, size_t size, const char *format, ...)¶
- 属于 稳定 ABI.
根据格式字符串 format 和额外参数,输出不超过 size 个字节到 str。 参见 Unix 手册页面 snprintf(3)。
-
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)¶
- 属于 稳定 ABI.
根据格式字符串 format 和变量参数列表 va,输出不超过 size 个字节到 str。 参见 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时,输出转换即成功并将 rv 个字符写入到 str (不包括末尾str[rv]位置的'\0'字节)。当
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.
Convert the initial part of the string in
strto an unsigned long value according to the givenbase, which must be between2and36inclusive, or be the special value0.Leading white space and case of characters are ignored. If
baseis zero it looks for a leading0b,0oor0xto tell which base. If these are absent it defaults to10. Base must be 0 or between 2 and 36 (inclusive). Ifptris non-NULLit will contain a pointer to the end of the scan.If the converted value falls out of range of corresponding return type, range error occurs (
errnois set toERANGE) andULONG_MAXis returned. If no conversion can be performed,0is returned.See also the Unix man page strtoul(3).
在 3.2 版本加入.
-
long PyOS_strtol(const char *str, char **ptr, int base)¶
- 属于 稳定 ABI.
Convert the initial part of the string in
strto an long value according to the givenbase, which must be between2and36inclusive, or be the special value0.Same as
PyOS_strtoul(), but return a long value instead andLONG_MAXon overflows.See also the Unix man page strtol(3).
在 3.2 版本加入.
-
double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)¶
- 属于 稳定 ABI.
将字符串
s转换为 double 类型,失败时会引发 Python 异常。 接受的字符串集合对应于可被 Python 的float()构造器所接受的字符集集合,除了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)¶
- 属于 稳定 ABI.
将 double val 转换为一个使用给定的 format_code, precision 和 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()相同。