Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当我没有';我不知道具体的编码_Python_Encoding_Hex_Osc - Fatal编程技术网

Python 当我没有';我不知道具体的编码

Python 当我没有';我不知道具体的编码,python,encoding,hex,osc,Python,Encoding,Hex,Osc,我正在使用OSC服务器接收数据,数据如下所示: b'Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'Muse-C46F/elements/alpha_relative\x00\x00\x00,ffff\x00\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00

我正在使用OSC服务器接收数据,数据如下所示:

b'Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'Muse-C46F/elements/alpha_relative\x00\x00\x00,ffff\x00\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00'
b'Muse-C46F/elements/alpha_session_score\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
我试图从这些编码序列中解码4个浮点数

这是我的全部代码:

print('Program Initiated')
UDP_IP = "192.168.2.57"
UDP_PORT = 4000

sock = socket.socket(socket.AF_INET,  # Internet
                socket.SOCK_DGRAM)  # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(1024)  # buffer size is 1024 bytes
    if 'alpha' in str(data):
        print(struct.unpack('>32s8sffff', data))

我看到了一个类似的问题,并使用了
打印(struct.unpack('>32s8sffff',data))
,但我发现
unpack需要56字节的缓冲区作为错误。

这些OSC消息由三部分组成:

  • 地址(应该以
    b'/'
    开头)
  • 类型标记字符串,以
    b','
    开头,并定义后面的参数类型和数量
  • 消息参数,由类型标记字符串定义
在问题中提供的数据中,每条消息包含36或40字节的地址,然后是5字节的标记类型字符串。忽略初始逗号,标记类型字符串由四个“f”组成,因此我们希望参数由四个浮点组成,由16个字节组成(每个浮点4个字节)

每个消息在四个浮点所需的16个字节之后都有一些额外的字节;让我们假设*这些是可以丢弃的填充

因此,结构格式将是:可变数量的地址字符、五个标记类型字符和四个浮点

然后,提取数据所需的代码如下所示:

b'Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'Muse-C46F/elements/alpha_relative\x00\x00\x00,ffff\x00\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00'
b'Muse-C46F/elements/alpha_session_score\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
$cat osc.py

  import struct

  data = [
     b"Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
     b"Muse-C46F/elements/alpha_relative\x00\x00\x00,ffff\x00\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x
     b"Muse-C46F/elements/alpha_session_score\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
     b"Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
  ]

  if __name__ == "__main__":
      for msg in data:
          num_address_bytes = msg.index(b",")
          num_argument_bytes = len(msg) - (num_address_bytes + 5)
          num_extra_bytes = num_argument_bytes - 16
          address, type_, *floats = struct.unpack(
              ">{}s5s4f".format(num_address_bytes), msg[:-num_extra_bytes]
          )
          print(address, type_, floats)
生成此输出:

b'Muse-C46F/elements/alpha_absolute\x00\x00\x00' b',ffff' [0.0, 0.0, 0.0, 0.0]
b'Muse-C46F/elements/alpha_relative\x00\x00\x00' b',ffff' [1.7796490496925177e-43, -2.000030279159546, -2.000030279159546, -2.000030279159546]
b'Muse-C46F/elements/alpha_session_score\x00\x00' b',ffff' [0.0, 0.0, 0.0, 0.0]
b'Muse-C46F/elements/alpha_absolute\x00\x00\x00' b',ffff' [0.0, 0.0, 0.0, 0.0]

*做假设通常是个坏主意。如果OSC服务器有文档,请检查其格式是否与标准格式不同

这些OSC信息由三部分组成:

  • 地址(应该以
    b'/'
    开头)
  • 类型标记字符串,以
    b','
    开头,并定义后面的参数类型和数量
  • 消息参数,由类型标记字符串定义
在问题中提供的数据中,每条消息包含36或40字节的地址,然后是5字节的标记类型字符串。忽略初始逗号,标记类型字符串由四个“f”组成,因此我们希望参数由四个浮点组成,由16个字节组成(每个浮点4个字节)

每个消息在四个浮点所需的16个字节之后都有一些额外的字节;让我们假设*这些是可以丢弃的填充

因此,结构格式将是:可变数量的地址字符、五个标记类型字符和四个浮点

然后,提取数据所需的代码如下所示:

b'Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'Muse-C46F/elements/alpha_relative\x00\x00\x00,ffff\x00\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00'
b'Muse-C46F/elements/alpha_session_score\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
b'Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
$cat osc.py

  import struct

  data = [
     b"Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
     b"Muse-C46F/elements/alpha_relative\x00\x00\x00,ffff\x00\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x7f\xc0\x00\x00\x
     b"Muse-C46F/elements/alpha_session_score\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
     b"Muse-C46F/elements/alpha_absolute\x00\x00\x00,ffff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
  ]

  if __name__ == "__main__":
      for msg in data:
          num_address_bytes = msg.index(b",")
          num_argument_bytes = len(msg) - (num_address_bytes + 5)
          num_extra_bytes = num_argument_bytes - 16
          address, type_, *floats = struct.unpack(
              ">{}s5s4f".format(num_address_bytes), msg[:-num_extra_bytes]
          )
          print(address, type_, floats)
生成此输出:

b'Muse-C46F/elements/alpha_absolute\x00\x00\x00' b',ffff' [0.0, 0.0, 0.0, 0.0]
b'Muse-C46F/elements/alpha_relative\x00\x00\x00' b',ffff' [1.7796490496925177e-43, -2.000030279159546, -2.000030279159546, -2.000030279159546]
b'Muse-C46F/elements/alpha_session_score\x00\x00' b',ffff' [0.0, 0.0, 0.0, 0.0]
b'Muse-C46F/elements/alpha_absolute\x00\x00\x00' b',ffff' [0.0, 0.0, 0.0, 0.0]
*做假设通常是个坏主意。如果OSC服务器有文档,请检查其格式是否与标准格式不同