“Python中二进制文件的读取”的版本间差异

来自Shiyin's note
跳到导航 跳到搜索
无编辑摘要
无编辑摘要
 
(未显示同一用户的3个中间版本)
第8行: 第8行:
str=a.hex() #这里是把两个16进制位直接输出为字符串
str=a.hex() #这里是把两个16进制位直接输出为字符串
num=struct.unpack('B',a)[0] #这是把一个byte装换为其二进制的原始数,但是是以10进制的形式出现
num=struct.unpack('B',a)[0] #这是把一个byte装换为其二进制的原始数,但是是以10进制的形式出现
*struct.unpack的用法比较丰富
*struct.unpack的用法比较丰富,[https://cloud.tencent.com/developer/article/1406350]
:*可以将不同的字节装换为不同的格式
:*可以将不同的字节装换为不同的格式
:*多字节数注意高低位的区
:*多字节数注意高低位[[大小端]]的区别,以及原码,补码,反码的概念[https://www.jianshu.com/p/a9613643738b]
:* 字节码 转 数字

:* 字节码 转 数字 ##
>>> struct.unpack('B', b'\xff') (255,) # 单字节
>>> struct.unpack('B', b'\xff') (255,) # 单字节
>>> struct.unpack('>i', b'\x00\x00\x00\xff') (255,) # 4字节,大端模式
>>> struct.unpack('>i', b'\x00\x00\x00\xff') (255,) # 4字节,大端模式

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进制)