Bytes Objects

这些函数引用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)

返回一个新的字节对象,其中字符串v的值为成功时的值,失败时为NULL参数v不能为NULL;它不会被检查。

PyObject* PyBytes_FromStringAndSize(const char *v, Py_ssize_t len)

在失败时返回一个新的字节对象,字符串v作为值,长度len,成功时返回NULL如果vNULL,则字节对象的内容未初始化。

PyObject* PyBytes_FromFormat(const char *format, ...)

使用C printf() -style 格式字符串和可变数量的参数,计算生成的Python字节对象的大小,并返回一个字节对象,它。变量参数必须是C类型,并且必须完全对应于格式字符串中的格式字符。允许使用以下格式字符:

格式字符类型评论
%%n / a字面值%character。
%cint单个字节,表示为C int。
%dint完全等效于printf("%d")
%uunsigned int完全等效于printf("%u")
%ld完全等效于printf("%ld")
%luunsigned long完全等效于printf("%lu")
%zdPy_ssize_t完全等效于printf("%zd")
%zusize_t完全等效于printf("%zu")
%iint完全等效于printf("%i")
%xint完全等效于printf("%x")
%schar *一个以null结尾的C字符数组。
%pvoid *C指针的十六进制表示。大部分等效于printf("%p"),除了它确保以字面值0x开始,而不管平台的printf

无法识别的格式字符会将所有格式字符串的其余部分按原样复制到结果对象,并丢弃任何额外的参数。

PyObject* PyBytes_FromFormatV(const char *format, va_list vargs)

PyBytes_FromFormat()相同,只是它需要两个参数。

PyObject* PyBytes_FromObject(PyObject *o)

返回实现缓冲区协议的对象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)创建对象,否则不得以任何方式修改数据。它不能被释放。If o is not a bytes object at all, PyBytes_AsString() returns NULL and raises TypeError.

char* PyBytes_AS_STRING(PyObject *string)

宏形式的PyBytes_AsString()但没有错误检查。

int PyBytes_AsStringAndSize(PyObject *obj, char **buffer, Py_ssize_t *length)

通过输出变量缓冲区长度返回对象obj的以null结束的内容。

如果lengthNULL,则字节对象可能不包含嵌入的空字节;如果是,则函数返回-1并且引发ValueError

缓冲区指的是obj的内部缓冲区,其在结尾处包括一个附加的空字节(不在长度中计算)。除非刚刚使用PyBytes_FromStringAndSize(NULL, size)创建对象,否则不得以任何方式修改数据。它不能被释放。If obj is not a bytes object at all, PyBytes_AsStringAndSize() returns -1 and raises TypeError.

在版本3.5中更改:以前,在字节对象中遇到嵌入的空字节时,引发了TypeError

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

* bytes中创建一个包含字节后附加的newpart内容的新字节对象;调用者将拥有新的引用。字节的旧值的引用将被窃取。如果无法创建新对象,则仍然会丢弃对字节的旧引用,并且* bytes的值将设置为NULL;将设置适当的异常。

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

* bytes中创建一个新的字节对象,其中包含附加到字节newpart的内容。此版本会减少newpart的引用计数。

int _PyBytes_Resize(PyObject **bytes, Py_ssize_t newsize)

一种方法来调整字节对象的大小,即使它是“不可变的”。只有使用这个来建立一个全新的字节对象;如果字节在代码的其他部分可能已经知道,请不要使用此。如果输入字节对象的引用计数不为1,则调用此函数是一个错误。将现有字节对象的地址作为一个左值(它可以写入),并且需要新的大小。成功时,* bytes保存已调整大小的字节对象,并返回0*字节中的地址可能与其输入值不同。如果重新分配失败,则解除分配* bytes的原始字节对象,将* bytes设置为NULL,设置内存异常,返回-1