以下代码在python 2.7中运行良好:
def GetMaxNoise(data, max_noise):
for byte in data:
noise = ComputeNoise(struct.unpack('=B',byte)[0])
if max_noise < noise:
max_noise = noise
return max_noise
其中data是一个包含二进制数据的字符串(取自网络数据包)。在
我试图将它移植到Python 3,我得到了:
File "Desktop/Test.py", line 2374, in GetMaxNoise
noise = ComputeNoise(struct.unpack('=B',byte)[0])
TypeError: 'int' does not support the buffer interface
如何将“data”转换为unpack()所需的适当类型?在
从struct模块https://docs.python.org/3.4/library/struct.html的文档中,我看到unpack方法期望它的第二个参数实现缓冲区协议,因此它通常期望
bytes
。在您的
data
对象似乎是从某处读取的bytes
类型。当您使用for
循环对其进行迭代时,您将得到byte
变量为单个int
值。在我不知道您的代码应该做什么以及如何做,但是可能会改变您迭代}?在
data
对象的方式,以处理int
,而是length == 1
的{假设
data
变量是一个字节串,它是从网络数据包上的二进制文件中获得的,它在Python2和Python3中的处理方式不同。在在Python2中,它是一个字符串。当您迭代它的值时,会得到单字节字符串,您可以使用
struct.unpack('=B')[0]
将其转换为int在Python3中,它是一个
bytes
对象。当你迭代它的值时,你可以直接得到整数!所以你应该直接使用:相关问题 更多 >
编程相关推荐