将Python 3中通过套接字接收的字节转换为浮点数

2024-04-19 21:18:57 发布

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

我尝试了以下建议的答案,但没有得到预期的结果: Python Socket Received ASCII convert to actual numbers (float)

我正在接收字节格式的数据,就像这样,使用插座.recv():

      b'(1,3,-121.551552,-123.602531,-40.582172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'

我正在尝试将上面的值作为30个浮点值的列表来接收。你知道吗

我知道我们必须使用struct库,但是我在尝试理解格式化的概念时遇到了困难。你知道吗


Tags: to数据答案convert字节格式asciisocket
1条回答
网友
1楼 · 发布于 2024-04-19 21:18:57

你输入的浮动不是固定长度的,除了有6个小数步(如果有的话)。那么为什么不直接使用^{},然后去掉括号,然后用逗号分开呢?你知道吗

分解每一步:

>>> b = b'(1,3,-121.551552,-123.602531,-40.582172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'
>>> b.decode()
'(1,3,-121.551552,-123.602531,-40.582172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'
>>> b.decode()[1:-1]
'1,3,-121.551552,-123.602531,-40.582172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0'
>>> b.decode()[1:-1].split(',')
['1', '3', '-121.551552', '-123.602531', '-40.582172', '0', '0', '0', '0', '0', '0', '0',
 '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
>>> [float(x) for x in b.decode()[1:-1].split(',')]
[1.0, 3.0, -121.551552, -123.602531, -40.582172, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
 0.0, 0.0, 0.0, 0.0]

还有一个更像Python的方法来完成最后一步:

>>> list(map(float, b.decode()[1:-1].split(',')))
[1.0, 3.0, -121.551552, -123.602531, -40.582172, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

相关问题 更多 >