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