
精准地来讲, 不存在专门用以处理字节的数据类型。不过因为str既是字符串, 同时又能够表示字节, 所以, 字节数组等于str。而在C语言当中, 我们能够便利地运用union来处理字节, 以及字节与int、float之间的转换。于其中, 举例来讲, 若要将一个32位无符号整数转变为字节, 此字节实则为长度是4的str那么你就需要借助位运算符像这样去书写: n 10240099 b1 chr((n 0xff000000) 24) b2 chr((n 0xff0000) 16) b3 chr((n 0xff00) 8) b4 chr(n 0xff) s b1 b2 b3 b4 s \x00\x9cc非常麻烦。如果换成浮点数就无能为力了。好在提供了一个模块来解决str和其他二进制数据类型的转换。的pack函数把任意数据类型变成字符串 import struct struct.pack(I, 10240099) \x00\x9ccpack的第一个参数是处理指令I的意思是代表字节顺序为big-, 此即网络序, I意味着为4字节无符号整数句号。后面的参数个数要和处理指令一致。把str变成相应的数据类型 struct.unpack(IH, \xf0\xf0\xf0\xf0\x80\x80) (4042322160, 32896)按照IH的阐释, 后续的str会逐个变成, I: 呈4字节无符号整数形态, 以及H: 为2字节无符号整数样式。故而, 哪怕不适用于去编写那种针对底层进行操作的字节流代码, 然而在那些针对性能要求并非很高的地方, 运用起来可就便利许多了。模块定义的数据类型可以参考官方文档.bmp格式的位图文件, 是特别简单的一种文件格式, 我们针对它来做一番分析。首先找一个bmp文件没有的话用“画图”画一个。读入前30个字节来分析 s \x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00BMP格式采用小端方式存储数据文件头的结构按顺序如下有两个字节, 其中BM代表位图, BA代表OS/2位图存在一个4字节整数, 其表示位图大小又有一个4字节整数, 它用于保留位还始终为0再有一个4字节整数, 它表示实际图像的偏移量还有一个4字节整数, 是关于其字节数的另外有一个4字节整数, 用来表示图像宽度也有一个4字节整数, 用来表示图像高度有一个2字节整数且始终是1最后有一个2字节整数, 代表颜色数。所以组合起来用读取 struct.unpack(ccIIIIIIHH, s) (B, M, 691256, 0, 54, 40, 640, 360, 1, 24)结果呈现出来, BM所表明的乃是位图, 位图具备这样的大小, 颜色数量是24。