位元組物件

當期望一個位元組引數但呼叫時使用了非位元組引數時,這些函式會引發 TypeError

type PyBytesObject

PyObject 的子型別表示一個 Python 位元組物件。

PyTypeObject PyBytes_Type
屬於 穩定 ABI 的一部分。

PyTypeObject 的例項表示 Python 位元組型別;它與 Python 層中的 bytes 是相同的物件。

int PyBytes_Check(PyObject *o)

如果物件 o 是一個位元組物件或位元組型別的子型別的例項,則返回 true。此函式總是成功。

int PyBytes_CheckExact(PyObject *o)

如果物件 o 是一個位元組物件,但不是位元組型別的子型別的例項,則返回 true。此函式總是成功。

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。如果 vNULL,則位元組物件的內容未初始化。

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

Py_ssize_t

等價於 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() 相同,只是它只接受兩個引數。

PyObject *PyBytes_FromObject(PyObject *o)
返回值:新的引用。屬於 穩定 ABI 的一部分。

返回實現緩衝區協議的物件 o 的位元組表示形式。

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 的一部分。

透過輸出變數 bufferlength 返回物件 obj 的以 null 結尾的內容。成功時返回 0

如果 lengthNULL,則位元組物件可能不包含嵌入的空位元組;如果包含,則該函式返回 -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 中建立一個新的位元組物件,其中包含附加到 bytesnewpart 的內容;呼叫者將擁有新引用。 對 bytes 的舊值的引用將被盜用。如果無法建立新物件,則仍將丟棄對 bytes 的舊引用,並且 *bytes 的值將被設定為 NULL;將設定相應的異常。

void PyBytes_ConcatAndDel(PyObject **bytes, PyObject *newpart)
屬於 穩定 ABI 的一部分。

*bytes 中建立一個新的位元組物件,其中包含附加到 bytesnewpart 的內容。此版本釋放對 newpart強引用 (即減少其引用計數)。

int _PyBytes_Resize(PyObject **bytes, Py_ssize_t newsize)

調整位元組物件的大小。 newsize 將是位元組物件的新長度。您可以將其視為建立新的位元組物件並銷燬舊物件,只是效率更高。將現有位元組物件的地址作為左值傳遞(可以寫入),以及所需的新大小。成功後,*bytes 儲存調整大小的位元組物件並返回 0*bytes 中的地址可能與其輸入值不同。如果重新分配失敗,則會釋放 *bytes 處的原始位元組物件,*bytes 將被設定為 NULL,設定 MemoryError,並返回 -1