2012-12-10 28 views
0

我有一个Simulink模型通过UDP发送数据到另一个程序(Blender),我可以接收数据包,但我一直无法弄清楚如何正确解码它们。在Python中解码Simulink的UDP数据包

在Simulink模型中,我只是发送一个基于正弦波的值,没有什么奇特的东西,只有一个值,比如1.452或者其他。在搅拌机我把它吐出它从数据包接收的数据,和我收到的东西,如:

b'<\xa6ya\x05\x93\xe3?' 

我已经不知道如何解码此。它似乎有一些十六进制值,但除此之外,我迷路了。我甚至不确定这些数据包含的是什么。它仅仅是来自Simulink的价值,还是它包含有关发件人和接收方IP地址,端口等内容的信息?

UPDATE: 我更新了Simulink模型,通过UDP传输一个恒定值用于调试/调查。该值是0.5234,而我的Python脚本咳出来的数据是:

b'\xab>W[\xb1\xbf\xe0?' 

,当转换为十六进制的读取(使用hexlify):

b'ab3e575bb1bfe03f' 

我将如何提取/解码0.5234出于此?

感谢您的帮助!

回答

1

您可以使用struct来解码你的二进制数据,在这种情况下,它似乎是一个double值:

>>> import struct 
>>> struct.unpack('d', b'\xab>W[\xb1\xbf\xe0?') 
(0.5234,) 
+0

太谢谢你了!因为这个原因,我一直在我的桌子上抨击我的头。 – celestialorb

+0

您也可以使用hex2num来解码十六进制字符串。但是由于某些原因,这些数字是颠倒的。所以如果你的字符串在变量“a”中,那么你需要运行“hex2num(a([15 16 13 14 11 12 9 10 7 8 5 6 3 4 1 2]))” – Navan