在Python 2.7中,如何使bytearray的memoryview返回整数元素?

4
b = bytearray(1)
m = memoryview(b)

由于类型(b [0])为int,我希望类型(m [0])也为int。从Python 3.2开始,这是正确的。但是在Python 2.7中,类型为str。我需要能够将memoryview传递给期望int数组的函数。
在Python 2.7中,我可以创建一个包装类并覆盖__getitem__。但是有没有技巧告诉memoryview对象返回int元素?
2个回答

1
使用ord应该可以解决问题:
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
>>> b = bytearray(1)
>>> m = memoryview(b)
>>> m[0]
'\x00'
>>> ord(m[0])
0
>>> map(ord, m)
[0]
>>> 

这是因为在Python 2中,字节数据存储在字符串中。Python 3现在区分字节和字符串(Unicode)。

但是我需要能够将memoryview传递给期望int数组的函数,因此接收函数不知道它必须使用ord。我需要将memoryview对象转换为可以传递给期望int数组的函数的内容。 - Jeff Thompson
1
@JeffThompson,使用map来实现。我已经将其添加到答案中。 - warvariuc

1

不,无法使memoryview__getitem__返回int对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接