我使用网络协议在网络上来回传输OSC(开放式声音控制消息)。
以byte array
以及其他格式接收消息。我正在努力理解它的字节数组部分
ascii中的一个示例消息是
/track_0_volume/x "value" 0.238
该消息对应的字节数组是
b'/track_0_volume/xx00x00x00,sfx00valuex00x00x00>sxb6F'
我可以看到字节数组中有/track_0_volume/x
,后面跟着三个空字符,然后是ascii值sf
,一个空字符value
,还有三个空字符串,然后是>sxb6F
。我不明白sf
字符是什么,也不明白末尾的>sxb6F
是如何表示0.238 的
我相信(我不太熟悉OSC消息格式),s
表示单词value
是字符串类型(与int
或float
相反),下一个值是float
(即value
和.238
)
最让我困惑的部分是结尾的小数部分:当我试图解码字节数组的那部分时,我得到了UnicodeDecodeError: 'utf-8 can't decode byte 0xb6
我也使用过struct.unpack('f', b'b6F')
,但没有成功。有人知道怎么解码吗?
根据文档,浮点数字是32位big-endian。
>>> struct.unpack('>f', '>sxb6F')[0]
0.23800000548362732
此外,所有字符串都以零字节结尾,再加上最多3个零字节,使长度为4的倍数。这就解释了你所有的x00
;浮子前面有3个字符串。
附言:我的例子是Python 2.7,你的例子似乎是Python 3。相应调整。