bytes 對象?

當期望帶一個字節串形參但卻帶一個非字節串形參被調用時,這些函數會引發 TypeError。

PyBytesObject?

這種 PyObject 的子類型表示一個 Python 字節對象。

PyTypeObject PyBytes_Type?

PyTypeObject 的實例代表一個 Python 字節類型,在 Python 層面它與 bytes 是相同的對象。

int PyBytes_Check(PyObject?*o)?

如果對象 o 是字節對象或字節類型的子類型的實例,則返回 true。

int PyBytes_CheckExact(PyObject?*o)?

如果對象 o 是字節對象,但不是字節類型子類型的實例,則返回 true。

PyObject* PyBytes_FromString(const char?*v)?
Return value: New reference.

成功時返回一個以字符串 v 的副本為值的新字節串對象,失敗時返回 NULL。 形參 v 不可為 NULL;它不會被檢查。

PyObject* PyBytes_FromStringAndSize(const char?*v, Py_ssize_t?len)?
Return value: New reference.

成功時返回一個以字符串 v 的副本為值且長度為 len 的新字節串對象,失敗時返回 NULL。 如果 vNULL,則不初始化字節串對象的內容。

PyObject* PyBytes_FromFormat(const char?*format, ...)?
Return value: New reference.

接受一個 C printf() 風格的 format 字符串和可變數量的參數,計算結果 Python 字節串對象的大小并返回參數值經格式化后的字節串對象。 可變數量的參數必須均為 C 類型并且必須恰好與 format 字符串中的格式字符相對應。 允許使用下列格式字符串:

格式字符

類型

注釋

%%

不適用

文字%字符。

%c

整型

一個字節,被表示為一個 C 語言的整型

%d

整型

相當于 printf("%d"). 1

%u

無符號整型

相當于 printf("%u"). 1

%ld

長整型

相當于 printf("%ld"). 1

%lu

無符號長整型

相當于 printf("%lu"). 1

%zd

Py_ssize_t

相當于 printf("%zd"). 1

%zu

size_t

相當于 printf("%zu"). 1

%i

整型

相當于 printf("%i"). 1

%x

整型

相當于 printf("%x"). 1

%s

const char*

以 null 為終止符的 C 字符數組。

%p

const void*

一個 C 指針的十六進制表示形式。 基本等價于 printf("%p") 但它會確保以字面值 0x 開頭,不論系統平臺上 printf 的輸出是什么。

無法識別的格式字符會導致將格式字符串的其余所有內容原樣復制到結果對象,并丟棄所有多余的參數。

1(1,2,3,4,5,6,7,8)

對于整數說明符(d,u,ld,lu,zd,zu,i,x):當給出精度時,0 轉換標志是有效的。

PyObject* PyBytes_FromFormatV(const char?*format, va_list?vargs)?
Return value: New reference.

PyBytes_FromFormat() 完全相同,除了它需要兩個參數。

PyObject* PyBytes_FromObject(PyObject?*o)?
Return value: New reference.

返回字節表示實現緩沖區協議的對象*o*。

Py_ssize_t PyBytes_Size(PyObject?*o)?

返回字節對象*o*中字節的長度。

Py_ssize_t PyBytes_GET_SIZE(PyObject?*o)?

宏版本的 PyBytes_Size() 但是不帶錯誤檢查。

char* PyBytes_AsString(PyObject?*o)?

返回對應 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)?

通過輸出變量 bufferlength 返回以 null 為終止符的對象 obj 的內容。

如果 lengthNULL,字節串對象就不包含嵌入的空字節;如果包含,則該函數將返回 -1 并引發 ValueError

該緩沖區指向 obj 的內部緩沖,它的末尾包含一個額外的空字節(不算在 length 當中)。 該數據不可通過任何方式來修改,除非是剛使用 PyBytes_FromStringAndSize(NULL, size) 創建該對象。 它不可被撤銷分配。 如果 obj 根本不是一個字節串對象,則 PyBytes_AsStringAndSize() 將返回 -1 并引發 TypeError

在 3.5 版更改: 以前,當字節串對象中出現嵌入的空字節時將引發 TypeError

void PyBytes_Concat(PyObject?**bytes, PyObject?*newpart)?

*bytes 中創建新的字節串對象,其中包含添加到 bytesnewpart 的內容;調用者將獲得新的引用。 對 bytes 原值的引用將被收回。 如果無法創建新對象,對 bytes 的舊引用仍將被丟棄且 *bytes 的值將被設為 NULL;并將設置適當的異常。

void PyBytes_ConcatAndDel(PyObject?**bytes, PyObject?*newpart)?

*bytes 中創建新的字節串對象,其中包含添加到 bytesnewpart 的內容。 此版本會減少 newpart 的引用計數。

int _PyBytes_Resize(PyObject?**bytes, Py_ssize_t?newsize)?

改變字節串大小的一種方式,即使其為“不可變對象”。 此方式僅用于創建全新的字節串對象;如果字節串在代碼的其他部分已知則不可使用此方式。 如果輸入字節串對象的引用計數不為一則調用此函數將報錯。 傳入一個現有字節串對象的地址作為 lvalue(它可能會被寫入),并傳入希望的新大小。 當成功時,*bytes 將存放改變大小后的字節串對象并返回 0*bytes 中的地址可能與其輸入值不同。 如果重新分配失敗,則 *bytes 上的原字節串對象將被撤銷分配,*bytes 會被設為 NULL,同時設置 MemoryError 并返回 -1