字节对象¶
当期望带一个字节串形参但却带一个非字节串形参被调用时,这些函数会引发 TypeError
。
-
PyTypeObject
PyBytes_Type
¶ PyTypeObject
的实例代表一个 Python 字节类型,在 Python 层面它与bytes
是相同的对象。
-
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
。 如果 v 为NULL
,则不初始化字节串对象的内容。
-
PyObject *
PyBytes_FromFormat
(const char *format, ...)¶ - Return value: New reference.
接受一个 C
printf()
风格的 format 字符串和可变数量的参数,计算结果 Python 字节串对象的大小并返回参数值经格式化后的字节串对象。 可变数量的参数必须均为 C 类型并且必须恰好与 format 字符串中的格式字符相对应。 允许使用下列格式字符串:格式字符
类型
注释
%%
不适用
文字%字符。
%c
int
一个字节,被表示为一个 C 语言的整型
%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
const char*
以 null 为终止符的 C 字符数组。
%p
const void*
一个 C 指针的十六进制表示形式。 基本等价于
printf("%p")
但它会确保以字面值0x
开头,不论系统平台上printf
的输出是什么。无法识别的格式字符会导致将格式字符串的其余所有内容原样复制到结果对象,并丢弃所有多余的参数。
-
PyObject *
PyBytes_FromFormatV
(const char *format, va_list vargs)¶ - Return value: New reference.
与
PyBytes_FromFormat()
完全相同,除了它需要两个参数。
-
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)¶ 通过输出变量 buffer 和 length 返回以 null 为终止符的对象 obj 的内容。
如果 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)¶ 在 *bytes 中创建新的字节串对象,其中包含添加到 bytes 的 newpart 的内容;调用者将获得新的引用。 对 bytes 原值的引用将被收回。 如果无法创建新对象,对 bytes 的旧引用仍将被丢弃且 *bytes 的值将被设为
NULL
;并将设置适当的异常。
-
void
PyBytes_ConcatAndDel
(PyObject **bytes, PyObject *newpart)¶ 在 *bytes 中创建新的字节串对象,其中包含添加到 bytes 的 newpart 的内容。 此版本会减少 newpart 的引用计数。
-
int
_PyBytes_Resize
(PyObject **bytes, Py_ssize_t newsize)¶ 改变字节串大小的一种方式,即使其为“不可变对象”。 此方式仅用于创建全新的字节串对象;如果字节串在代码的其他部分已知则不可使用此方式。 如果输入字节串对象的引用计数不为一则调用此函数将报错。 传入一个现有字节串对象的地址作为 lvalue(它可能会被写入),并传入希望的新大小。 当成功时,*bytes 将存放改变大小后的字节串对象并返回
0
;*bytes 中的地址可能与其输入值不同。 如果重新分配失败,则 *bytes 上的原字节串对象将被撤销分配,*bytes 会被设为NULL
,同时设置MemoryError
并返回-1
。