如何在python中解码/编码十进制值



我使用网络协议在网络上来回传输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是字符串类型(与intfloat相反),下一个值是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。相应调整。