无法从字节转换为int

dis*_*ort 3 python python-2.7 python-3.x

我有下一个价值

value = bytearray(b'\x85\x13\xbd|\xfb\xbc\xc3\x95\xbeL6L\xfa\xbf0U_`$]\xca\xee]z\xef\xa0\xd6(\x15\x8b\xca\x0e\x1f7\xa9\xf0\xa4\x98\xc5\xdf\xcdM5\xef\xc2\x052`\xeb\x13\xd9\x99B.\x95\xb2\xbd\x96\xd9\x14\xe6F\x9e\xfd\xd8\x00')
Run Code Online (Sandbox Code Playgroud)

当我尝试在python3.x中进行转换时,它运行良好.

>>> int.from_bytes(value, byteorder='little')
2909369579440607969688280064437289348250138784421305732473112318543540722321676649649580720015118044118243611774710427666475769804427735898727217762490192773
Run Code Online (Sandbox Code Playgroud)

如何在python2.7中转换它?我已经读过将一串字节转换为int(python)

struct.unpack(fmt, value)[0]
Run Code Online (Sandbox Code Playgroud)

但不知道如何处理fmt.

pok*_*oke 6

您可以from_bytes在Python 2中编写自己的函数:

def from_bytes (data, big_endian = False):
    if isinstance(data, str):
        data = bytearray(data)
    if big_endian:
        data = reversed(data)
    num = 0
    for offset, byte in enumerate(data):
        num += byte << (offset * 8)
    return num
Run Code Online (Sandbox Code Playgroud)

像这样使用:

>>> data = b'\x85\x13\xbd|\xfb\xbc\xc3\x95\xbeL6L\xfa\xbf0U_`$]\xca\xee]z\xef\xa0\xd6(\x15\x8b\xca\x0e\x1f7\xa9\xf0\xa4\x98\xc5\xdf\xcdM5\xef\xc2\x052`\xeb\x13\xd9\x99B.\x95\xb2\xbd\x96\xd9\x14\xe6F\x9e\xfd\xd8\x00'
>>> from_bytes(data)
2909369579440607969688280064437289348250138784421305732473112318543540722321676649649580720015118044118243611774710427666475769804427735898727217762490192773L
Run Code Online (Sandbox Code Playgroud)

至于struct,你不能真正使用它,因为它只支持某种类型的解包元素,最多8个字节的整数.但是既然你想处理任意字节串,你就必须使用别的东西.