我已经从套接字接收到数据。在Matlab中,该数据通过以下函数转换为单精度
data_cal_rx = typecast(data_tcp2, "single");
现在我想在Python中拥有相同的函数。从谷歌和堆栈溢出中搜索,我发现Python中的单个精度是numpy.float32。所以我用以下函数代替:
import numpy as np
data_cal_rx = np.float32(data_tcp2)
Matlab中的data_tcp2是一个整数数组,具有:类:uint8尺寸:1x70848
然而,当我通过Python中的套接字接收到data_tcp2时,它显示为:
\x00\x00C\x00 QE\x0\x04E\x00'E\x00BE\x00D\x0\x00LE\x0\x00\x10*E\x00`\x00@D\x00\x10+\x0\x00C\x000I\x0\x00A\x0\x16\x0\x13\x00…
我从python中的终端得到了这个错误:
ValueError: could not convert string to float:
python中的套接字可能有问题?任何帮助或想法都将不胜感激。
非常感谢
作为一个例子,让我们从32位浮点数组开始:
orig = np.arange(5, dtype=np.float32)
我们将把它转换成一个字节缓冲区:
data = orig.tobytes()
这显示为:
b'x00x00x00x00x00x00x80?x00x00x00@x00x00@@x00x00x80@'
注意;b";,这表示这是一个字节对象,而不是字符串。如果您的数据实际上是一个字符串,请参阅答案底部的。
现在我们已经有了包含数组中数据的字节缓冲区,我们可以使用将其转换回32位浮点值的数组
out = np.frombuffer(data, dtype=np.float32)
(out
现在与orig
相同(。
如果data
是字符串,则需要首先将其强制转换为字节缓冲区,这可以通过来实现
data = bytes(data, 'latin1')
";CCD_ 4";部分是编码。当从字符串转换为字节时,这种编码似乎不会更改任何数据。