迭代字节字符串Python3
我是Python的初学者,正在运行以下代码:迭代字节字符串Python3,python,python-3.x,python-2.x,Python,Python 3.x,Python 2.x,我是Python的初学者,正在运行以下代码: myInteger = 0 multiple = 256 myString = "" for i in pkt: myString += "%02x" %struct.unpack("B", i)[0] myInteger += struct.unpack("B", i)[0] * multiple multiple = 1 其中pkt是一个字节字符串 这段代码在Python 2中运行良好,但升级到3后会出现错误: Typ
myInteger = 0
multiple = 256
myString = ""
for i in pkt:
myString += "%02x" %struct.unpack("B", i)[0]
myInteger += struct.unpack("B", i)[0] * multiple
multiple = 1
其中pkt是一个字节字符串
这段代码在Python 2中运行良好,但升级到3后会出现错误:
TypeError: 'int' does not support the buffer interace
经过一些研究,我发现在Python2中,一个字节字符串就是一个字符串,因此,当对它进行迭代时,我们得到了单字节字符串。但在Python3中,我们得到了整数,而且struct.unpack显然不接受整数
我阅读了这些问题的答案,但我不明白如何更改代码以使其运行
如何迭代pkt并获取有效值以传递给struct.unpack
如果这是一个明显的问题,我很抱歉,但我似乎真的无法让它工作。提前谢谢
编辑
因此,也许更具体地说,我正在尝试使用raspberry pi进行ble扫描,我正在使用以下提供的代码:
代码在Python2上运行,但在Python3上,每次调用struct.pack时都会出现上述错误
==必须使用
int.to_bytes
方法将整数转换为字节:
myString += "%02x" %struct.unpack("B", int.to_bytes(i, 1, 'big'))[0]
myInteger += struct.unpack("B", int.to_bytes(i, 1, 'big'))[0] * multiple
如前所述,您基本上可以用
i
替换struct.unpack(“B”,i)[0]
因此,Python 2中包含以下代码:
myInteger = 0
multiple = 256
myString = ""
pkt = "python"
for i in pkt:
myString += "%02x" % struct.unpack("B", i)[0]
myInteger += struct.unpack("B", i)[0] * multiple
multiple = 1
print myString, myInteger
# output: 707974686f6e 29234
在Python 3中变成:
myInteger = 0
multiple = 256
myString = ""
pkt = b"python"
for i in pkt:
myString += "%02x" % i
myInteger += i * multiple
multiple = 1
print(myString, myInteger)
# output: 707974686f6e 29234
为什么不在Python 3中执行
myString+=%02x”%i
和myInteger+=i*multiple
?您是否有任何理由必须使用struct.unpack()
?可能重复@stovfl我提到我已经读过这个问题,但正如我所解释的,我不知道如何将这些答案应用到我的特定代码中。因此,我的问题是。你想使用链接的GitHubblescan.py
,即Python 2代码,而不改变Python 3吗?@stovfl我没有说我不想改变任何东西。实际上,我正在做相反的事情,那就是找到一个在Python3中运行这段代码的解决方案。我面临的唯一问题是我在问题中提到的问题,我希望任何人都能帮助我。尝试了你的答案,代码确实运行了,但没有产生预期的结果。也许我应该更清楚一点,把全部代码都发布出来。基本上,我尝试使用raspberry pi进行BLE扫描,我使用的代码是:这段代码在Python2上运行,但在struct.pack上出现了我提到的错误。pkt变量通过pkt=sock.recv(255)获得。这有区别吗?非常感谢!您可能应该提供完整的Python2代码,包括您的测试用例。