python读写二进制数据_Python:读写二进制数据

我知道有很多几乎相同的问题,但似乎没有真正针对一般情况。

所以假设我想打开一个文件,在内存中读取它,可能对相应的位字符串执行一些操作,然后将结果写回文件。

下面是我觉得很简单的,但是它会导致完全不同的输出。请注意,为了简单起见,我只在此处复制文件:file = open('INPUT','rb')

data = file.read()

data_16 = data.encode('hex')

data_2 = bin(int(data_16,16))

OUT = open('OUTPUT','wb')

i = 0

while i < len(data_2) / 8:

byte = int(data_2[i*8 : (i+1)*8], 2)

OUT.write('%c' % byte)

i += 1

OUT.close()

我看了data、data_16和data_2。在我看来,这些转变是有意义的。

正如预期的那样,输出文件的大小与输入文件的大小完全相同。

编辑:我考虑过前导“0b”必须被剪切的可能性。请参见以下内容:>>> data[:100]

'BMFU"\x00\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00\xe8\x03\x00\x00\xee\x02\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x0b\x00\x00\x12\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05=o\xce\xf4^\x16\xe0\x80\x92\x00\x00\x00\x01I\x02\x1d\xb5\x81\xcaN\xcb\xb8\x91\xc3\xc6T\xef\xcb\xe1j\x06\xc3;\x0c*\xb9Q\xbc\xff\xf6\xff\xff\xf7\xed\xdf'

>>> data_16[:100]

'424d46552200000000003600000028000000e8030000ee020000010018000000000000000000120b0000120b000000000000'

>>> data_2[:100]

'0b10000100100110101000110010101010010001000000000000000000000000000000000000000000011011000000000000'

>>> data_2[1]

'b'

也许BMFU"部分应该从data中切下来?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值