无法在python3中正确使用unpack()

无法在python3中正确使用unpack(),python,python-3.x,Python,Python 3.x,我正在尝试将其他人10年前的python2脚本转换为python3。我已经解决了大部分问题,但仍在这个问题上纠缠不休。这是电话线 (a,b,c,d) = unpack('!HIIH', someData) 当我跑步时,我得到了这个: TypeError: a bytes-like object is required, not 'str' 网上有很多关于这个问题的文章,但没有一篇能告诉我正确的答案。我曾尝试在someData对象上以各种方式使用“bytes”函数,但没有任何效果 其他信息是,

我正在尝试将其他人10年前的python2脚本转换为python3。我已经解决了大部分问题,但仍在这个问题上纠缠不休。这是电话线

(a,b,c,d) = unpack('!HIIH', someData)
当我跑步时,我得到了这个:

TypeError: a bytes-like object is required, not 'str'
网上有很多关于这个问题的文章,但没有一篇能告诉我正确的答案。我曾尝试在someData对象上以各种方式使用“bytes”函数,但没有任何效果

其他信息是,我相信someData对象的起源是通过另一个模块中的这段代码实现的:

e = str()

for i in range((len(plaintext))):
     e += chr(ord(plaintext[i]) ^ ord(counter[i]))

return e
在python2中,这显然起了作用。在python3中,行的开头
e+=chr(ord(…
产生错误:

TypeError: ord() expected string of length 1, but int found
我通过将线路(基于互联网搜索)改为

一些数据被分配了e的输出

在python2中,语句(a,b,c,d)=unpack(“!HIIH',someData)工作正常,但正如最初所述,在python3中会出现类型错误


谢谢。

正如您所知,Python3区分字符串和字节,而Python2没有。因此您需要变量
someData
来包含字节而不是字符串。 有几种解决方案,但由于您已经使用了
struct.unpack()
,因此也可以使用
struct.pack()
首先创建数据:

e=bytearray()
然后:

e += pack('B', (ord(plaintext[i]) ^ ord(counter[i])))

打包为格式化
B
(无符号字节)将从0到255的数字转换为字节。请记住从struct import pack添加
或类似内容。

您首先需要回过头来查找设置
someData
的位置。可能那里的更改会将其保留为byte类型,而不是错误地将其转换为str类型。谢谢。我尝试了您的建议,但它仍然会产生错误错误,我不想让这篇文章变成一篇开放式教程,但事实就是这样。我添加了您在上面提供的行,并检查了它的准确性。运行时,行显示在回溯中,后跟错误,因此:e+=pack('B',(ord(明文[I])^ord(计数器[I]))类型错误:ord()应为长度为1的字符串,但找到int。由于我的python专业技能有限,我尝试了一些变体,但没有效果。
e += pack('B', (ord(plaintext[i]) ^ ord(counter[i])))