[英]struct.error: unpack requires a bytes object of length 16 in Python3.5
我有以下代码并正在尝试运行它。 但是有一个错误。 这是我正在使用的代码和文件。
import sys
import re
import subprocess as commands
import struct
class rbin:
def file_op(self,rfile):
self.readfile = rfile
self.wfile = open('loadmem.txt', 'w')
for line in self.readfile.readlines():
for cnt in range (0,4096,1):
x = cnt*16
test = line[x:x+16]
if (len(test) == 14):
magic = struct.unpack("<14b",test)
for i in range(0,14,1):
self.wfile.write("0x%X\n" % (magic[i]))
else:
magic = struct.unpack("<16b",test)
for i in range(0,16,1):
if ((x <= 498) | ((x <= 65520) & (x >= 65280))):
self.wfile.write("0x%X\n" % (magic[i]))
self.readfile.close()
self.wfile.close()
# Call Class
T = rbin()
# Call function from class
T.file_op(open('1.ex5','rb'))
错误是:
Traceback (most recent call last):
File "check.py", line 30, in <module>
T.file_op(open('1.ex5','rb'))
File "check.py", line 19, in file_op
magic = struct.unpack("<3b",test)
struct.error: unpack requires a bytes object of length 3
文件是: 1.ex5
请让我知道如何消除错误以及我错过了什么。
每次调用 readlines() 都会为您生成从文件中当前 position 到下一个 \n (0x0a) 字符的数据。 现在,由于这实际上是一个二进制文件,因此实际上没有“换行”的概念。
如果您在十六进制编辑器中打开文件,您将看到如下内容:
00000d70: 4451 baf1 dab3 7f69 ba67 a75b 1dee e6c2 DQ.....i.g.[....
00000d80: c816 a6cf be27 ace2 e6bb efef 0578 9a50 .....'.......x.P
00000d90: 0a86 28b8 1cae e9b4 e5ff ac5c e664 170a ..(........\.d..
^ ^
fake linefeed another fake linefeed
在该文件的特定部分中,少于 16 个字节,这就是您尝试struct.unpack
16 个字节失败的原因。
道德:不要在二进制文件上运行 readlines()。 它会“工作”(即不会抛出异常),但数据并不是真正的文本行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.