无法转换从字节
问题描述:
诠释我的下一个值无法转换从字节
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?我已经阅读了convert a string of bytes into an int (python)
struct.unpack(fmt, value)[0]
但是不知道如何处理fmt。
答
你可以只写你自己的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
像这样来使用:
>>> 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
,你真的不能用这个,因为它仅支持开箱元素一个certain kind,最多8个字节的整数。但既然你想处理任意的字节字符串,你将不得不使用别的东西。
+0
谢谢。有用。 – discort
答
您可以使用.encode('hex')
和int(x, 16)
组合:
num = int(str(value).encode('hex'), 16)
请注意,你需要为了解析它作为小端使用类似
。
你只是想要一个伟大的大数字表格呢? – LexyStardust
是的,我想要。我无法想象我需要付出什么努力。这是价值的长度吗? – discort
'struct.unpack'不适合你的情况,你有太多的字节。你想要http://stackoverflow.com/a/444814/8747 –