我有一个bytes
元素,字长为1,一个字节,内容可以是b'\xff\xff\x01'
,意思是[-1, -1, 1]
。
我想把它从bytes形式转换成int形式,逻辑上我的尝试是:
ints = [int.from_bytes(j, byteorder='little', signed=True) for j in b'\xff\xff\x01']
TypeError:无法将“int”对象转换为字节
但是for j in bytes()
将bytes元素直接转换为int j
,这是一个无符号的转换,我需要有符号的。我如何将我的bytes一个字节一个字节地转换为一个有符号的整数?
4条答案
按热度按时间wwodge7n1#
然而,这并不起作用,因为
for j in bytes()
将bytes元素直接转换为intj
。正如你所注意到的,
bytes
已经是一个整数值的可迭代函数,如果我们有很多数据,那么保持bytes
不变,并根据需要转换值会更节省内存,我们可以简单地通过数学运算将字节的无符号解释转换为相应的有符号表示:并 Package 索引过程:
如果我们想要或者需要提前完成所有的转换,那么这将直接提供给列表解析:
另一方面,我们可以重新定义这个问题:要 * 从原始数据中获取
bytes
对象作为子序列 *(类似于Python 2.x中的工作方式),我们可以使用1元素切片;或者我们可以将int
值 Package 成一个新的bytes
,前者要适应原始代码会比较麻烦,但后者很简单:u2nhd7ah2#
另一种方法是使用Numpy:
okxuctiv3#
这个解决方案是愚蠢的,但至少它的工作。
fwzugrvs4#
不知道还有没有用!刚才看到你们的评论了:)