gpt4 book ai didi

Python:读写二进制数据

转载 作者:行者123 更新时间:2023-11-28 22:52:33 25 4
gpt4 key购买 nike

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

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

以下是对我来说似乎很简单的内容,但它会导致完全不同的输出。请注意,为简单起见,我只在此处复制文件:

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()

我查看了datadata_16data_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 中删除?

最佳答案

>>> bin(25)
'0b11001'

注意两点:

  1. 以“0b”开头。这意味着您的切片将减少 2 位。

  2. 缺少 8 位的填充。这将每次损坏您的数据,除非它碰巧与第 1 点相吻合。

逐字节处理文件,而不是像这样一口气处理文件。如果您发现您的代码太慢,那么您需要找到一种逐字节工作的更快方法,而不是切换到像这种有无法弥补的缺陷的方法。

关于Python:读写二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com