字符串转换和格式化

数字转换和格式化字符串输出的功能.

int PyOS_snprintf字符 *strsize_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 > 0format !=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不得有前导或尾随空格。转换与当前语言环境无关.

如果endptrNULL,转换整个字符串。举起ValueError并返回-1.0如果字符串不是浮点数的有效表示.

如果endptr不是NULL,则转换为字符串aspossible并设置*endptr指向第一个未转换的字符。如果字符串的初始段不是浮点数的有效表示,则将*endptr设置为指向字符串的开头,引发ValueError,并返回-1.0.

如果s表示一个太大而无法存放在浮点数中的值(例如,"1e500"在许多平台上都是这样的字符串)那么如果overflow_exceptionNULL返回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 valformat_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()只能忽略不计.

评论被关闭。