字节对象

这些功能提高 TypeError 当需要一个字节参数并用非字节参数调用时。

type PyBytesObject

这种subtype PyObject 表示python bytes对象。

PyTypeObject PyBytes_Type

此实例 PyTypeObject 表示python字节类型;它与 bytes 在python层中。

int PyBytes_Check(PyObject *o)

如果对象的值为True,则返回TRUE o 是Bytes对象或Bytes类型的子类型的实例。此功能总是成功的。

int PyBytes_CheckExact(PyObject *o)

如果对象的值为True,则返回TRUE o 是Bytes对象,但不是Bytes类型的子类型的实例。此功能总是成功的。

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

返回带有字符串副本的新bytes对象 v 作为成功的价值,以及 NULL 失败论。参数 v 不得 NULL 不会被检查。

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

返回带有字符串副本的新bytes对象 v 作为价值和长度 len 论成功 NULL 失败论。如果 vNULL ,未初始化bytes对象的内容。

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

采取C printf() 风格 格式 字符串和变量个数的参数,计算得到的python bytes对象的大小,并返回一个bytes对象,其中包含格式化为该对象的值。变量参数必须是C类型,并且必须与中的格式字符完全对应。 格式 字符串。允许以下格式字符:

设置字符格式

类型

评论

%%

n/a

文字%字符。

%c

int

单字节,表示为C int。

%d

int

相当于 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

int

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

%x

int

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

%s

常量字符 *

以空结尾的C字符数组。

%p

常数空隙 *

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)

返回对象以空结尾的内容 obj 通过输出变量 缓冲区长度 .

如果 长度NULL bytes对象不能包含嵌入的空字节;如果包含,则函数返回 -1 和A ValueError 提高了。

缓冲区是指 obj ,结尾处包含一个额外的空字节(不计入 长度 )除非对象是使用 PyBytes_FromStringAndSize(NULL, size) . 不能解除分配。如果 obj 根本不是字节对象, PyBytes_AsStringAndSize() 返回 -1 并提出 TypeError .

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

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

在中创建新的bytes对象 *bytes 包含的内容 新零件 追加到 字节 ;调用方将拥有新引用。对旧值的引用 字节 会被偷的。如果无法创建新对象,则对 字节 仍将被丢弃 *bytes 将被设置为 NULL ;将设置适当的异常。

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

在中创建新的bytes对象 *bytes 包含的内容 新零件 追加到 字节 . 此版本减少的引用计数 新零件 .

int _PyBytes_Resize(PyObject **bytes, Py_ssize_t newsize)

一种调整字节对象大小的方法,即使它是“不变的”。只使用它来构建一个全新的字节对象;如果在代码的其他部分已经知道了字节,则不要使用它。如果输入字节对象上的refcount不是1,则调用此函数是错误的。将现有bytes对象的地址作为左值(它可以写入)和所需的新大小传递。关于成功, *bytes 保留已调整大小的字节对象和 0 被退回;地址在 *bytes 可能与输入值不同。如果重新分配失败,则位于 *bytes 被解除分配, *bytes 设置为 NULLMemoryError 被设置为 -1 返回。