Python中二进制文件的读取

来自Shiyin's note
Shen讨论 | 贡献2021年11月21日 (日) 14:30的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索
  • open一个二进制文件
f=open('IFS_ImageZW/2021-08-18_17-10-52.dat', "rb") 
  • 读取的时候是以字节为单位的
f.seek(6) #跳过几个字节
byte=f.read(1) #读入一个字节
  • 读入后的byte为bytes类型,如何和其它类型相互转化
a=b'\xbb' #可以看到这里把4个二进制位装换为一个16进制的数
str=a.hex() #这里是把两个16进制位直接输出为字符串
num=struct.unpack('B',a)[0] #这是把一个byte装换为其二进制的原始数,但是是以10进制的形式出现
  • struct.unpack的用法比较丰富,[1]
  • 可以将不同的字节装换为不同的格式
  • 多字节数要注意高低位大小端的区别,以及原码,补码,反码的概念[2]
  • 字节码 转 数字
>>> struct.unpack('B', b'\xff')                      (255,)          # 单字节
>>> struct.unpack('>i', b'\x00\x00\x00\xff')         (255,)          # 4字节,大端模式
>>> struct.unpack('<i', b'\x00\x00\x00\xff')         (-16777216,)    # 4字节,小端模式
  • 手动 转换字节码 -> 字符串
>>> B = b'\xe9'
>>> S = B.hex()
>>> S                                               # 值 'e9'
>>> int(S,16)                                       # 值 233, 字符串(16进制格式)-> 数字(10进制)