字符串轉換與格式化?
用于數字轉換和格式化字符串輸出的函數
-
int PyOS_snprintf(char *str, size_t size, const char *format, ...)?
- Part of the Stable ABI.
根據格式字符串 format 和額外參數,輸出不超過(guò) size 個(gè)字節到 str。 參見(jiàn) Unix 手冊頁(yè)面 snprintf(3)。
-
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)?
- Part of the Stable ABI.
根據格式字符串 format 和變量參數列表 va,輸出不超過(guò) size 個(gè)字節到 str。 參見(jiàn) Unix 手冊頁(yè)面 vsnprintf(3)。
PyOS_snprintf()
和 PyOS_vsnprintf()
包裝 C 標準庫函數 snprintf()
和 vsnprintf()
。它們的目的是保證在極端情況下的一致行為,而標準 C 的函數則不然。
包裝器會(huì )確保 str[size-1]
在返回時(shí)始終為 '\0'
。 它們從不寫(xiě)入超過(guò) size 個(gè)字節 (包括末尾的 '\0'
) 到 str。 兩個(gè)函數都要求 str != NULL
, size > 0
, format != NULL
并且 size < INT_MAX
。
這些函數的返回值( rv )應按照以下規則被解釋?zhuān)?/p>
當
0 <= rv < size
時(shí),輸出轉換即成功并將 rv 個(gè)字符寫(xiě)入到 str (不包括末尾str[rv]
位置的'\0'
字節)。當
rv >= size
時(shí),輸出轉換會(huì )被截斷并且需要一個(gè)具有rv + 1
字節的緩沖區才能成功執行。 在此情況下str[size-1]
為'\0'
。當
rv < 0
時(shí),"會(huì )發(fā)生不好的事情。" 在此情況下str[size-1]
也為'\0'
,但 str 的其余部分是未定義的。 錯誤的確切原因取決于底層平臺。
以下函數提供與語(yǔ)言環(huán)境無(wú)關(guān)的字符串到數字轉換。
-
double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)?
- Part of the Stable ABI.
將字符串
s
轉換為 double 類(lèi)型,失敗時(shí)引發(fā)Python異常。接受的字符串的集合對應于被 Python 的float()
構造函數接受的字符串的集合,除了s
必須沒(méi)有前導或尾隨空格。轉換必須獨立于當前的區域。如果
endptr
是NULL
,轉換整個(gè)字符串。引發(fā)ValueError
并且 返回-1.0
如果字符串不是浮點(diǎn)數的有效的表達方式。如果
endptr
不是NULL
,盡可能多的轉換字符串并將*endptr
設置為指向第一個(gè)未轉換的字符。如果字符串的初始段不是浮點(diǎn)數的有效的表達方式,將*endptr
設置為指向字符串的開(kāi)頭,引發(fā) ValueError 異常,并且返回-1.0
。如果
s
表示一個(gè)太大而不能存儲在一個(gè)浮點(diǎn)數中的值(比方說(shuō),"1e500"
在許多平臺上是一個(gè)字符串)然后如果overflow_exception
是NULL
返回Py_HUGE_VAL
(用適當的符號)并且不設置任何異常。 在其他方面,overflow_exception
必須指向一個(gè) Python 異常對象;引發(fā)異常并返回-1.0
。在這兩種情況下,設置*endptr
指向轉換值之后的第一個(gè)字符。如果在轉換期間發(fā)生任何其他錯誤(比如一個(gè)內存不足的錯誤),設置適當的 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.
轉換 double val 為一個(gè)使用 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
表示總是在返回的字符串前附加一個(gè)符號字符,即使 val 為非負數。Py_DTSF_ADD_DOT_0
表示確保返回的字符串看起來(lái)不像是一個(gè)整數。Py_DTSF_ALT
表示應用 "替代的" 格式化規則。 相關(guān)細節請參閱PyOS_snprintf()
'#'
定義文檔。
如果 ptype 不為
NULL
,則它指向的值將被設為Py_DTST_FINITE
,Py_DTST_INFINITE
或Py_DTST_NAN
中的一個(gè),分別表示 val 是一個(gè)有限數字、無(wú)限數字或非數字。返回值是一個(gè)指向包含轉換后字符串的 buffer 的指針,如果轉換失敗則為
NULL
。 調用方要負責調用PyMem_Free()
來(lái)釋放返回的字符串。3.1 新版功能.
-
int PyOS_stricmp(const char *s1, const char *s2)?
字符串不區分大小寫(xiě)。該函數幾乎與
strcmp()
的工作方式相同,只是它忽略了大小寫(xiě)。
-
int PyOS_strnicmp(const char *s1, const char *s2, Py_ssize_t size)?
字符串不區分大小寫(xiě)。該函數幾乎與
strncmp()
的工作方式相同,只是它忽略了大小寫(xiě)。