Discuss / Python / 交作业,今天学了struct

交作业,今天学了struct

Topic source
def bmp_info(data):
    inf_t = struct.unpack('<ccIIIIIIHH',data[:30])
    if inf_t[0:2] in [(b'B',b'M'),(b'B',b'A')]:
        return {'width':inf_t[6],
                'height':inf_t[7],
                'color':inf_t[9]}

struct模块可以实现bytes和其他数据类型的转换。

pack函数可以按格式把int转化为bytes,如struct.pack('H',12345),H表示2字节int,2字节表现转化为bytes之后的长度,不够位数用0补齐,int表示是将int转化为bytes。12345的十六进制数是3039,倒过来是3930(我也不知道为什么bytes里是倒过来的),所以转化后会显示b'\x39\x30',但是在idle里会把ascii范围内的数转化为对应字符显示,所以实际显示的是b'90',这里存放的就是int12345的二进制数据,和b'12345'不同,b'12345'是把1-5这5个数字对应的ascii码转为bytes类。

unpack函数正好相反,可以把bytes转化为int,如struct.unpack('H',b'ab'),H表示只转化2字节的bytes,多了会报错,第二个参数表示要转化的bytes,在b'ab'中,a的ascii码是61,b的ascii码是62,所以b'ab'实际上是0x610x62,因为会倒过来,所以是0x620x61,以两字节作为单位转化为int所以0x6261看作0x6261,对应的十进制数是25185。


  • 1

Reply