2016-10-23 45 views
1

我已经生成了一个随机的16字节字符串。它看起来像这样:将16个字节的随机数据转换为Python中的整数

b'\xb68 \xe9L\xbd\x97\xe0\xd6Q\x91c\t\xc3z\\' 

我想将其转换为(正)整数。在Python中执行此操作的最佳方式是什么?

我很感激帮助。

+0

什么是它的预期字节顺序? – kindall

+0

可能相关:http://stackoverflow.com/questions/444591/convert-a-string-of-bytes-into-an-int-python – Logan

+0

@Logan我也看过那篇文章,但我不明白为什么要使用struct?这不可能是解决方案。 – aeduG

回答

2

在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

+0

哦,我认为这正是我需要的。如果我的数据是随机的,我认为使用小端或大端并不重要,它只会对数字进行洗牌,对吧? – aeduG

+0

我想这取决于你计划用整数做什么,但是,如果你改变字节顺序,数字将会不同。 – Logan

+0

从该号码返回到原始字符串的命令是什么? – aeduG

1

一个兼容的解决方案既与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