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

来自Shiyin's note
跳到导航 跳到搜索
(创建页面,内容为“*open一个二进制文件 f=open('IFS_ImageZW/2021-08-18_17-10-52.dat', "rb") *读取的时候是以字节为单位的 f.seek(6) #跳过几个字节 byte=f.read…”)
 
无编辑摘要
第12行: 第12行:
:*多字节数注意高低位的区分
:*多字节数注意高低位的区分


## 字节码 转 数字 ##
:* 字节码 转 数字 ##
>>> 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字节,大端模式
>>> struct.unpack('<i', b'\x00\x00\x00\xff') (-16777216,) # 4字节,小端模式
>>> struct.unpack('<i', b'\x00\x00\x00\xff') (-16777216,) # 4字节,小端模式
## 手动 转换字节码 -> 字符串
:* 手动 转换字节码 -> 字符串
>>> B = b'\xe9'
>>> B = b'\xe9'
>>> S = B.hex()
>>> S = B.hex()
>>> S # 值 'e9'
>>> S # 值 'e9'
字符串(16进制格式)-> 数字(10进制)
>>> int(S,16) # 值 233, 字符串(16进制格式)-> 数字(10进制)
>>> int(S,16) # 值 233

2021年11月21日 (日) 14:16的版本

  • 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的用法比较丰富
  • 可以将不同的字节装换为不同的格式
  • 多字节数注意高低位的区分
  • 字节码 转 数字 ##
>>> 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进制)