Python/Simulink/MATLAB:如何在Python中正确地从Simulink中读取单类型4bytes数据?

2024-06-26 05:57:28 发布

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

我在Simulink中有一个程序,可以通过TCP-IP发送一些值,并在Python2.7中读取它们。数据以“单个”值的形式发送。Python中的代码将其读取为4个字符串,其长度为32位(字符串长度为4)。在

print "x0:", ord(data[0])
print "x1:", ord(data[1])
print "x2:", ord(data[2])
print "x3:", ord(data[3])

问题是,我在Python中得到的值与发送的值不同。在

^{pr2}$

所以如何得到这些值。。。0.125,13.65,51.79,113.4。。。作为接收端的正确数字(Python)?在


Tags: 数据字符串代码程序ipdata形式tcp
1条回答
网友
1楼 · 发布于 2024-06-26 05:57:28

使用struct来解压您即将脱离连线的4字节浮点。在

>>> import struct
>>> patt='!f'    # big-endian single-precision float, 4 bytes
>>> _0_125 = chr(62)+chr(0)+chr(0)+chr(0)
>>> struct.unpack(patt,_0_125)
(0.125,)   
>>> _13_65 = chr(65)+chr(90)+chr(96)+chr(0)
>>> struct.unpack(patt,_13_65)
(13.6484375,) 
>>> _51_79 = chr(66)+chr(79)+chr(42)+chr(128)
>>> struct.unpack(patt,_51_79)
(51.79150390625,)

这将返回一个元组,因为传递给unpack的bytestring中可能有多个数据项。在

我不得不用chr()从你的问题中重新创建bytestrings。如果您已经在x中有一个bytestring,那么struct.unpack(patt,x)就可以了。在

您看到的字节形式的数据与您期望的值无关,因为它是IEEE754格式的。数据是二进制的,字节边界没有意义:

  • 位31:符号(0=正,1=负)
  • 位30到23:指数,偏移127
  • 位22到0:数字1的分数ff(其中.表示二进制点)

相关问题 更多 >