我已经生成了一个随机的16字节字符串。它看起来像这样:将16个字节的随机数据转换为Python中的整数
b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\'
我想将其转换为(正)整数。在Python中执行此操作的最佳方式是什么?
我很感激帮助。
我已经生成了一个随机的16字节字符串。它看起来像这样:将16个字节的随机数据转换为Python中的整数
b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\'
我想将其转换为(正)整数。在Python中执行此操作的最佳方式是什么?
我很感激帮助。
在Python 3.2+,您可以使用int.from_bytes()
:
>>> int.from_bytes(b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\', byteorder='little')
122926391642694380673571917327050487990
您还可以使用 '大' 字节顺序:
>>> int.from_bytes(b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\', byteorder='big')
242210931377951886843917078789492013660
您也可以指定是否要使用二进制补码表示。欲了解更多信息:https://docs.python.org/3/library/stdtypes.html
一个兼容的解决方案既与Python 2和Python 3是struct.unpack使用:
import struct
n = b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\'
m = struct.unpack("<QQ", n)
res = (m[0] << 64) | m[1]
print(res)
结果:298534947350364316483256053893818307030L
什么是它的预期字节顺序? – kindall
可能相关:http://stackoverflow.com/questions/444591/convert-a-string-of-bytes-into-an-int-python – Logan
@Logan我也看过那篇文章,但我不明白为什么要使用struct?这不可能是解决方案。 – aeduG