我有下一个值
import numpy as np
import matplotlib.pyplot as plt
list = [['0-50',4],['50-100',11],['100-150',73],['150-200',46]]
n_groups = len(list)
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.35
opacity = 0.4
error_config = {'ecolor': '0.3'}
number = []
ranges = []
for item in list:
number.append(item[1])
ranges.append(item[0])
rects1 = plt.bar(index, number, bar_width,
alpha=opacity,
color='b',
error_kw=error_config)
plt.xlabel('Number')
plt.ylabel('range')
plt.xticks(index + bar_width, (ranges[0],ranges[1],ranges[2],ranges[3]))
plt.legend()
plt.tight_layout()
plt.show()
当我尝试在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')
如何在python2.7中转换它?我已经阅读了convert a string of bytes into an int (python)
>>> int.from_bytes(value, byteorder='little')
2909369579440607969688280064437289348250138784421305732473112318543540722321676649649580720015118044118243611774710427666475769804427735898727217762490192773
但不知道如何处理fmt。
答案 0 :(得分:6)
您可以在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
,你不能真正使用它,因为它只支持解压缩certain kind的元素,最多8个字节的整数。但是既然你想处理任意字节串,你就必须使用别的东西。
答案 1 :(得分:4)
您可以结合使用.encode('hex')
和int(x, 16)
:
num = int(str(value).encode('hex'), 16)
请注意,您需要使用类似
的内容int(''.join(reversed(value)).encode('hex'), 16)
为了将其解析为 little endian。