Python/字节数组

维基教科书,自由的教学读本
跳到导航 跳到搜索

Buffer Protocol是特定的Python对象,包装了访问内存数组或者缓冲区。包括内置类型:

  • bytes是只读字节数组。
  • bytearray是可读写字节数组。

还包括扩展类型如array.array

a=b"abc"  #创建bytes对象
bytes("汉字","utf-8") #创建bytes对象,解码方式为utf-8
b=bytearray(b"abc") #创建bytearray对象

与字符串一样,支持append、extend、upper等方法,加法、乘法等运算。

如果要引用其片段,需要使用memoryview函数,如:

a=bytearray([0x10,0x11,0x12,0x13,0x14,0x15,0x16])
v=memoryview(a)

内存视图转化为其它类型,可用tobytes、tolist,或者cast方法,或者struct.unpack方法。

调用内存视图的release函数,可以使得原对象实例恢复全部操作能力。

格式类型的前缀
标题文本 标题文本 标题文本 标题文本
@ native native native
= native standard none
< 小尾序 standard none
> 大尾序 standard none
! 网络序 standard none
格式类型
Format C Type Python type Standard size 注释
x pad byte no value
c char bytes of length 1 1
b signed char integer 1
B unsigned char integer 1
? _Bool bool 1 C99引入的类型。返回值是 True或False
h short integer 2
H short integer 2
i int integer 4
I unsigned int integer 4
l long integer 4
L unsigned long integer 4
q long long integer 8
Q unsigned long long integer 8
n ssize_t integer
N size_t integer
e 半精度 float 2
f float float 4
d double float 8
s char[] bytes 整数后跟s,表示字节序列长度。默认为1。会自动截断或补0字节
p char[] bytes Pascal string
P void * integer

数字后面跟随格式字符,表示该格式字符重复的次数。例如:'4h'等价于'hhhh'