位元組物件¶
當期望一個位元組引數但呼叫時使用了非位元組引數時,這些函式會引發 TypeError
。
-
PyTypeObject PyBytes_Type¶
- 屬於 穩定 ABI 的一部分。
此
PyTypeObject
的例項表示 Python 位元組型別;它與 Python 層中的bytes
是相同的物件。
-
PyObject *PyBytes_FromString(const char *v)¶
- 返回值:新的引用。屬於 穩定 ABI 的一部分。
成功時,返回一個新的位元組物件,其值為字串 v 的副本,失敗時返回
NULL
。引數 v 不能為NULL
;不會對其進行檢查。
-
PyObject *PyBytes_FromStringAndSize(const char *v, Py_ssize_t len)¶
- 返回值:新的引用。屬於 穩定 ABI 的一部分。
成功時,返回一個新的位元組物件,其值為字串 v 的副本,長度為 len,失敗時返回
NULL
。如果 v 為NULL
,則位元組物件的內容未初始化。
-
PyObject *PyBytes_FromFormat(const char *format, ...)¶
- 返回值:新的引用。屬於 穩定 ABI 的一部分。
接受一個 C
printf()
樣式的 format 字串和可變數量的引數,計算生成的 Python 位元組物件的大小,並返回一個位元組物件,其中包含格式化後的值。可變引數必須是 C 型別,並且必須與 format 字串中的格式字元完全對應。允許使用以下格式字元格式字元
型別
註釋
%%
n/a
字面量 % 字元。
%c
int
單個位元組,表示為 C int。
%d
int
等價於
printf("%d")
。[1]%u
unsigned int
等價於
printf("%u")
。[1]%ld
long
等價於
printf("%ld")
。[1]%lu
unsigned long
等價於
printf("%lu")
。[1]%zd
等價於
printf("%zd")
。[1]%zu
size_t
等價於
printf("%zu")
。[1]%i
int
等價於
printf("%i")
。[1]%x
int
等價於
printf("%x")
。[1]%s
const char*
一個以空字元結尾的 C 字元陣列。
%p
const void*
C 指標的十六進位制表示形式。大多數情況下等價於
printf("%p")
,但保證以字面量0x
開頭,而不管平臺的printf
生成什麼。無法識別的格式字元會導致格式字串的其餘部分按原樣複製到結果物件,並丟棄任何額外的引數。
-
PyObject *PyBytes_FromFormatV(const char *format, va_list vargs)¶
- 返回值:新的引用。屬於 穩定 ABI 的一部分。
與
PyBytes_FromFormat()
相同,只是它只接受兩個引數。
-
Py_ssize_t PyBytes_Size(PyObject *o)¶
- 屬於 穩定 ABI 的一部分。
返回位元組物件 o 中位元組的長度。
-
Py_ssize_t PyBytes_GET_SIZE(PyObject *o)¶
與
PyBytes_Size()
類似,但不進行錯誤檢查。
-
char *PyBytes_AsString(PyObject *o)¶
- 屬於 穩定 ABI 的一部分。
返回指向 o 內容的指標。該指標指向 o 的內部緩衝區,該緩衝區由
len(o) + 1
個位元組組成。緩衝區中的最後一個位元組始終為空,無論是否存在其他空位元組。除非使用PyBytes_FromStringAndSize(NULL, size)
建立物件,否則不得以任何方式修改資料。也不得釋放該記憶體。如果 o 根本不是位元組物件,PyBytes_AsString()
將返回NULL
並引發TypeError
。
-
char *PyBytes_AS_STRING(PyObject *string)¶
與
PyBytes_AsString()
類似,但不進行錯誤檢查。
-
int PyBytes_AsStringAndSize(PyObject *obj, char **buffer, Py_ssize_t *length)¶
- 屬於 穩定 ABI 的一部分。
透過輸出變數 buffer 和 length 返回物件 obj 的以 null 結尾的內容。成功時返回
0
。如果 length 為
NULL
,則位元組物件可能不包含嵌入的空位元組;如果包含,則該函式返回-1
並引發ValueError
。該緩衝區指向 obj 的內部緩衝區,該緩衝區在末尾包含一個額外的空位元組(不計入 length)。除非使用
PyBytes_FromStringAndSize(NULL, size)
建立物件,否則不得以任何方式修改資料。也不得釋放該記憶體。如果 obj 根本不是位元組物件,PyBytes_AsStringAndSize()
將返回-1
並引發TypeError
。在 3.5 版本中更改: 之前,當在位元組物件中遇到嵌入的空位元組時,會引發
TypeError
。
-
void PyBytes_Concat(PyObject **bytes, PyObject *newpart)¶
- 屬於 穩定 ABI 的一部分。
在 *bytes 中建立一個新的位元組物件,其中包含附加到 bytes 的 newpart 的內容;呼叫者將擁有新引用。 對 bytes 的舊值的引用將被盜用。如果無法建立新物件,則仍將丟棄對 bytes 的舊引用,並且 *bytes 的值將被設定為
NULL
;將設定相應的異常。
-
void PyBytes_ConcatAndDel(PyObject **bytes, PyObject *newpart)¶
- 屬於 穩定 ABI 的一部分。
在 *bytes 中建立一個新的位元組物件,其中包含附加到 bytes 的 newpart 的內容。此版本釋放對 newpart 的 強引用 (即減少其引用計數)。
-
int _PyBytes_Resize(PyObject **bytes, Py_ssize_t newsize)¶
調整位元組物件的大小。 newsize 將是位元組物件的新長度。您可以將其視為建立新的位元組物件並銷燬舊物件,只是效率更高。將現有位元組物件的地址作為左值傳遞(可以寫入),以及所需的新大小。成功後,*bytes 儲存調整大小的位元組物件並返回
0
;*bytes 中的地址可能與其輸入值不同。如果重新分配失敗,則會釋放 *bytes 處的原始位元組物件,*bytes 將被設定為NULL
,設定MemoryError
,並返回-1
。