我正在尝试解析形成数字的ascii字符数组(float,int ...)有时数组长度为1,2,3 .... 8 ...我正在寻找一种方法来获取整个数组(每次只有一个完整的值)并返回数字以将其添加到json。
我正在使用python 3.是否有固定的功能来做到这一点?我还没有在互联网上找到任何东西。
我在考虑这样的事情:
return arrayBytes[0]<<8 | arrayBytes[1]
但是我得到像574这样的值,因此它必须是错误的,只能使用2个ascii数组长度。
这里有一个输入示例:
4 value: 0x32 0x38 0x2e 0x36
2 value 0x34 0x39
3 value 0x30 0x2e 0x34
答案 0 :(得分:1)
您似乎有数字的ASCII表示形式:
>>> '\x32\x38\x2e\x36'
'28.6'
>>> '\x34\x39'
'49'
>>> '\x30\x2e\x34'
'0.4'
在这些上调用float()
将它们变成Python浮点对象就足够了:
>>> float('\x32\x38\x2e\x36')
28.6
>>> float('\x34\x39')
49.0
>>> float('\x30\x2e\x34')
0.4
如果您的输入是整数,那么它们代表ASCII码点。在Python 3中,使用bytes()
将这些快速转回文本:
>>> bytes([50, 57, 46, 57])
b'29.9'
>>> bytes([50, 57, 46, 57]).decode('ascii')
'29.9'
>>> float(bytes([50, 57, 46, 57]))
29.9
在Python 2中,改为使用bytearray()
:
>>> bytearray([50, 57, 46, 57])
bytearray(b'29.9')
>>> str(bytearray([50, 57, 46, 57]))
'29.9'
>>> bytearray([50, 57, 46, 57]).decode('ascii')
u'29.9'
>>> float(bytearray([50, 57, 46, 57]))
29.9
无论哪种方式,您都可以轻松地从整数列表转换为字节,文本或浮点值。
答案 1 :(得分:0)
您将无法使用按位运算,因为它们仅适用于小型python整数。相反,你需要乘以2的等效幂。
mult = 1 << 8
answer = 0
for number in asciiBytes:
answer *= mult
answer += number
如果您只是存储数字的字符串表示形式,而不是将数字存储为按位分隔的数字,则调用float(str)
将字符串转换为数字。
例如float('423.3') == 423.3