ASCII数组到数字在Python中

时间:2014-08-12 14:32:02

标签: python ascii

我正在尝试解析形成数字的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

2 个答案:

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