python逐字节读取二进制文件

时间:2017-05-18 22:12:47

标签: python

这看起来很愚蠢,但我在python中是一个完整的新手。

所以,我有一个以

开头的二进制文件
ff d8 ff e0 00 10 4a

(通过Hex Editor Neo和java程序看到)

然而,当我尝试用

的python阅读它时
with open(absolutePathInput, "rb") as f:
    while True:
        current_byte = f.read(1)
        if(not current_byte):
            break
        print(hex(current_byte[0]))

我得到了

ff d8 ff e0 0 10 31

似乎只要第一个0x00被重新出现就会出错。

我做错了什么? 谢谢你!

2 个答案:

答案 0 :(得分:1)

我认为问题是你试图取消引用current_byte,好像它是一个数组,但它只是一个字节

def test_write_bin(self):  
  fname = 'test.bin'
  f = open(fname, 'wb')
  # ff d8 ff e0 00 10 4a
  f.write(bytearray([255, 216, 255, 224, 0, 16, 74]))
  f.close()
  with open(fname, "rb") as f2:
    while True:
      current_byte = f2.read(1)
      if (not current_byte):
        break
      val = ord(current_byte)
      print hex(val),
  print

该程序产生输出:

0xff 0xd8 0xff 0xe0 0x0 0x10 0x4a

答案 1 :(得分:0)

import binascii

with open(absolutePathInput, "rb") as f:
    buff = f.read()

line = binascii.hexlify(buff)
hex_string = [line[i:i+2] for i in range(0, len(line), 2)]

简单而暴力