字符串转换和格式化 – 实用程序(Python教程)(参考资料)
字符串转换和格式化
- int
PyOS_snprintf
(字符 *str,size_t size,const char *format, …) - 输出不超过size字节到str根据格式字符串format和额外的参数。参见Unix手册页snprintf(2).
- int
PyOS_vsnprintf
( char *str,size_t size,const char *format,va_list的 va) - 根据格式字符串size和变量参数列表str输出不大于format字节到va。Unix手册页vsnprintf(2).
PyOS_snprintf()
和PyOS_vsnprintf()
包装标准C库函数snprintf()
和vsnprintf()
。他们的目的是保证在角落案件中的一致行为,标准C的功能不在于
包装纸确保str*[*size-1]总是"\0"
回来的时候他们每次写入超过size字节(包括尾随"\0"
)到str.Both函数需要str != NULL
, size > 0
和format !=NULL
.
如果平台没有vsnprintf()
和截断所需的缓冲区大小超过size超过512个字节,Python以Py_FatalError.
返回值(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) - 将字符串
s
转换为double
,在失败时引发Python异常。接受的字符串集对应于Python的float()
构造函数接受的字符串集,但s
不得有前导或尾随空格。转换与当前语言环境无关.如果
endptr
是NULL
,转换整个字符串。举起ValueError
并返回-1.0
如果字符串不是浮点数的有效表示.如果endptr不是
NULL
,则转换为字符串aspossible并设置*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
(双 val,char format_code,int precision,int flags,int *ptype) - 使用提供的
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()
"#"
说明符fordetails.
如果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()
只能忽略不计.
评论被关闭。