Python中的ASCII数组到数字

2024-09-28 22:21:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析一个ascii字符数组,它构成一个数字(float,int…),有时数组长度是1,2,3….8。。。我正在寻找一种方法来获取整个数组(每次只有一个完整的值)并返回数字以将其添加到json中。在

我使用的是python3。有没有固定的函数来做这件事?我还没有在网上找到任何东西。在

我在想这样的事情:

return arrayBytes[0]<<8 | arrayBytes[1]

但是我在一个%值中得到了574这样的值,所以它肯定是错误的,并且只适用于2个ascii数组长度。在

这里有一个输入示例:

^{pr2}$

Tags: 方法函数json示例return错误ascii数字
2条回答

您将不能使用按位操作,因为这些操作只适用于较小的python整数。相反,你需要乘以2的等效幂。在

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

如果只存储数字的字符串表示形式,而不是存储按位分隔的数字,则调用float(str)将字符串转换为数字。在

例如float('423.3') == 423.3

您似乎对数字有ASCII表示:

>>> '\x32\x38\x2e\x36'
'28.6'
>>> '\x34\x39'
'49'
>>> '\x30\x2e\x34'
'0.4'

在这些对象上调用float()将它们转换为Python float对象就足够了:

^{pr2}$

如果您的输入是整数,那么它们表示ASCII码位。在Python3中,使用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

在Python2中,请改用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

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

相关问题 更多 >