在Python 3中,将套接字接收到的字节转换为浮点值



我试着按照这里建议的答案进行操作,但没有得到预期的结果:Python套接字接收ASCII转换为实际数字(浮点(

我使用socket.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个浮点值的列表来接收。

我知道我们必须使用结构库,但我在理解格式化的概念时遇到了困难。

传入的浮点不是固定长度的,除了有6个小数步(如果有的话(。那么,为什么不直接使用bytes.decode(),然后去掉括号,然后用逗号分隔呢?

每个步骤分解:

>>> 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]

最新更新