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

2024-10-03 11:12:20 发布

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

我使用网络协议在网络上来回传输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

我相信,s表示单词value是字符串类型(与intfloat相反),下一个值是float(即value和{})

最让我困惑的部分是末尾的小数部分:当我试图解码字节数组的那部分时,我得到一个UnicodeDecodeError: 'utf-8 can't decode byte 0xb6

我也使用了struct.unpack('f', b'\b6F'),但没有成功。有人知道怎么解码吗?在


Tags: 消息字节valueasciitrack数组bytesf
1条回答
网友
1楼 · 发布于 2024-10-03 11:12:20

根据the documentation的说法,浮点数是32位,大端数。在

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

另外,所有字符串都以一个零字节结尾,再加上最多3个零字节,使长度成为4的倍数。这解释了您拥有的所有\x00;在float前面有3个字符串。在

另外,我的例子是Python2.7,你的是Python3。相应调整。在

相关问题 更多 >