Python中如何将ASCII数组转换为数字

0 投票
2 回答
1216 浏览
提问于 2025-04-18 17:00

我正在尝试解析一个由ASCII字符组成的数组,这些字符表示一个数字(可以是浮点数或整数等)。有时候这个数组的长度是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

你不能使用位运算,因为位运算只适用于小的 Python 整数。相反,你需要用相应的二的幂来进行乘法运算。

mult = 1 << 8
answer = 0
for number in asciiBytes:
    answer *= mult
    answer += number

如果你只是存储数字的字符串表示,而不是把数字的各个部分分开存储,那么可以用 float(str) 将字符串转换成数字。

比如说 float('423.3') == 423.3

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

无论哪种方式,你都可以轻松地将整数列表转换为字节、文本或浮点值。

撰写回答