簡體   English   中英

無法從字節轉換為int

[英]Unable convert to int from bytes

我有下一個價值

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中轉換它? 我已經讀過將一串字節轉換為int(python)

struct.unpack(fmt, value)[0]

但不知道如何處理fmt。

您可以在Python 2中編寫自己的from_bytes函數:

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

像這樣使用:

>>> 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

至於struct ,你不能真正使用它,因為它只支持某種類型的解包元素,最多8個字節的整數。 但是既然你想處理任意字節串,你就必須使用別的東西。

您可以使用.encode('hex')int(x, 16)

num = int(str(value).encode('hex'), 16)

請注意,您需要使用類似的東西

int(''.join(reversed(value)).encode('hex'), 16)

為了把它解析為端。

參考: https//stackoverflow.com/a/444814/8747

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM