1

我正在使用网络协议通过网络来回传输 OSC(开放声音控制消息)。

byte array以和其他格式接收消息。我试图理解它的字节数组部分。

一个示例消息,在 ascii 中是

/track_0_volume/x "value" 0.238

该消息对应的字节数组是

b'/track_0_volume/x\x00\x00\x00,sf\x00value\x00\x00\x00>s\xb6F'

我可以看到/track_0_volume/x后面跟着三个空字符的字节数组,然后是 ascii 值sf,一个空字符,还有value三个空字符,然后>s\xb6F我不明白这些sf字符是什么,也不知道>s\xb6F最后如何表示 0.238

我相信,(我对 OSC 消息格式不太熟悉)s表明这个词value是字符串类型(而不是intor float),下一个值是 a float(即valueand .238

对我来说最令人困惑的部分是最后的小数部分:当我尝试解码字节数组的那部分时,我得到一个UnicodeDecodeError: 'utf-8 can't decode byte 0xb6

我也用过struct.unpack('f', b'\b6F'),没有成功。有人知道如何解码吗?

4

1 回答 1

3

According to the documentation a floating point number is 32 bits, big-endian.

>>> struct.unpack('>f', '>s\xb6F')[0]
0.23800000548362732

Additionally all strings end with a zero byte, plus up to 3 more zero bytes to make the length a multiple of 4. That explains all the \x00 you have; there are 3 strings preceding the float.

P.S. My example is Python 2.7, yours appears to be Python 3. Adjust accordingly.

于 2014-09-30T22:03:11.633 回答