Python 无法从字节转换为int

Python 无法从字节转换为int,python,python-2.7,python-3.x,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') 当我尝试在python3.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')
当我尝试在python3.x中转换时,效果很好

>>> int.from_bytes(value, byteorder='little')
2909369579440607969688280064437289348250138784421305732473112318543540722321676649649580720015118044118243611774710427666475769804427735898727217762490192773
如何在python2.7中转换它?我已经读过了


但是不知道如何使用fmt。

您可以在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

对于
struct
,您不能真正使用它,因为它只支持解包a的元素,最多8字节整数。但是,由于您想要处理任意字节字符串,因此必须使用其他方法。

您可以使用
.encode('hex')
int(x,16)
的组合:


请注意,您需要使用

int(''.join(reversed(value)).encode('hex'), 16)
以便将其解析为小端点


参考资料:

你只想从中得到一个大数字吗?是的,我想要。我无法想象我需要对fmt做些什么。这是值的长度吗?
struct.unpack
不适合您的情况,您的字节太多了。你想要@Robᵩ: 几乎,我们需要反转
value
以获得与OP中相同的数字。例如,
int(str(value[:-1])。encode('hex'),16)
。或者
sum(注意,你需要使用
int('''.join(reversed(value)).encode('hex'),16)
这样的东西才能将其解析为little endian。经过基准测试,我发现这比我的解决方案快得多,尽管这是解析字符串…很好的发现!你可以使用
str(value[:-1])
而不是
“”。对于little endian,连接(反向(值))
,不确定一个是否比另一个有任何优势。
>>> 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
num = int(str(value).encode('hex'), 16)
int(''.join(reversed(value)).encode('hex'), 16)