字节对象

这些功能提升TypeError当期望一个字节参数并被称为非字节参数时

 

PyBytesObject
这个 的子类型PyObject代表一个Python字节对象.
PyTypeObject PyBytes_Type
PyTypeObject的这个实例表示Python字节类型;它与Python层中bytes对象相同.
int PyBytes_Check PyObject  *o
如果对象o是字节对象或字节类型的子类型的实例.
int PyBytes_CheckExact PyObject  *o
返回true如果对象o是一个字节对象,但不是字节类型的asubtype实例.
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,那么bytes对象的内容是未初始化的.

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

取一个C printf() – 样式format字符串和可变数量的参数,计算生成的Python字节对象的大小和返回字节对象的值格式化进去。变量arguments必须是C类型,并且必须与format字符串中的格式字符完全对应。允许使用以下格式字符:

格式字符 键入 注释
%% n/a 字面%字符
%c //int 单个字节,表示为C int
%d int 等于printf("%d")。[1]
%u unsigned int 相当于printf("%u")。[1]
%ld 相当于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 * null结尾的C characterarray.
%p const void * Cpointer的十六进制表示。大致相当于printf("%p")除了保证从文字0x开始,不管平台的printf yields.

一个无法识别的格式字符导致所有其余的格式字符串,作为结果对象的原样,并且丢弃任何额外的参数.

[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.

返回实现bufferprotocol的对象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
返回以null结尾的内容对象obj通过输出变量bufferlength.

如果lengthNULLbytes对象可能不包含嵌入的空字节;如果是,则函数返回-1ValueError被养了

缓冲区指的是obj,最后包括一个额外的空字节(不计入length)。除非对象刚刚使用PyBytes_FromStringAndSize(NULL, size)创建,否则不会以任何方式修改数据。它不能被解除分配。如果obj根本不是一个字节对象,PyBytes_AsStringAndSize()返回-1并引发TypeError.

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

void PyBytes_Concat PyObject  **bytes,PyObject  *newpart
*bytes中创建一个新的字节对象,其中newpart的内容附加到bytes;调用者将拥有新的引用。对bytes的旧值的引用将被盗。如果新对象无法处理,则bytes的旧引用仍将被丢弃,而*bytes的值将设置为NULL;将设置相应的异常.
void PyBytes_ConcatAndDel PyObject  **bytes,PyObject  *newpart
创建*bytes中的一个新的字节对象,包含附加到newpartbytes的内容。这个版本递减了newpart.
int _PyBytes_Resize的引用计数( PyObject  **bytes,Py_ssize_t  newsize
一种调整字节对象大小的方法,即使它是“不可变的”。只使用它来构建一个全新的字节对象;如果字节可能已经在代码的其他部分中已知,则不要使用此方法。如果输入字节对象上的引用计数不是1,则调用此函数是错误的。将现有字节对象的地址作为左值(可以写入)传递,并且新的sizedesired。成功时,*bytes保存调整大小的字节对象和0返回;*bytes中的地址可能与其输入值不同。如果分配失败,则*bytes的原始字节对象被解除分配,*bytes设置为NULL, MemoryError设置,-1返回

评论被关闭。