当我不知道编码时如何解码数据
How do I decode data when I don't know the encoding
我正在使用 OSC 服务器接收数据,数据如下所示:
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xbbP\x128\xe6/\xd4\x00\x00\x00\x00\x00\x00\x00\x00'
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xbbOw\x8f\xa7\xac\x10\x00\x00\x00\x00\x00\x00\x00\x00'
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xbb\x10\x1f\xf2JN\xed\x00\x00\x00\x00\x00\x00\x00\x00'
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xbah[\nY\xe9K\x00\x00\x00\x00\x00\x00\x00\x00'
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xb8\x8f\x97\xb1\x04\xc4B\x00\x00\x00\x00\x00\x00\x00\x00'
数据标题为:Person0/elements/alpha_absolute
参数是:dddd (4 floats)
其余部分似乎已编码。我不明白如何获得我应该收到的 4 个花车
这是我的全部代码:
import socket
print('Program Initiated')
UDP_IP = "127.0.0.1"
UDP_PORT = 6000
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(2048) # buffer size is 1024 bytes
if 'alpha' in str(data):
print(data)
使用这个:
title,args,flt1,flt2,flt3,flt4 = struct.unpack('>32s8sdddd', data)
由于你对结构一无所知,所以这是基于以下猜测:
title
字段是一个最长 32 个字节的字符串,因为它是文本字符串,第 32 个字节始终是 0
.
args
字段是一个最长为 8 个字节的字符串,因为当您假设... 时剩下的就是这个字符串
- 四个 "floats" 中的每一个都是 8 个字节长,因此,从技术上讲,一个
double float
。最后 8 个字节总是 0
。这是一个有效的双数(0
,实际上);它们之前的 8 个字节都是大端格式的有效浮点数,这就是 2 个有效的浮点数。所以,往回数,另外16个0一定是另外2个值,剩下的几个字节一定属于args
字段。
运行 所提供数据的 unpack
给出了这个结果:
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.1066905392564757 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10668132073594472 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10571479478158681 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10315484049525485 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.09594104835265774 0.0
唯一值得注意的是,在四个浮动项目中,只有一个似乎实际使用过。
我正在使用 OSC 服务器接收数据,数据如下所示:
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xbbP\x128\xe6/\xd4\x00\x00\x00\x00\x00\x00\x00\x00'
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xbbOw\x8f\xa7\xac\x10\x00\x00\x00\x00\x00\x00\x00\x00'
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xbb\x10\x1f\xf2JN\xed\x00\x00\x00\x00\x00\x00\x00\x00'
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xbah[\nY\xe9K\x00\x00\x00\x00\x00\x00\x00\x00'
b'Person0/elements/alpha_absolute\x00,dddd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xb8\x8f\x97\xb1\x04\xc4B\x00\x00\x00\x00\x00\x00\x00\x00'
数据标题为:Person0/elements/alpha_absolute 参数是:dddd (4 floats)
其余部分似乎已编码。我不明白如何获得我应该收到的 4 个花车
这是我的全部代码:
import socket
print('Program Initiated')
UDP_IP = "127.0.0.1"
UDP_PORT = 6000
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(2048) # buffer size is 1024 bytes
if 'alpha' in str(data):
print(data)
使用这个:
title,args,flt1,flt2,flt3,flt4 = struct.unpack('>32s8sdddd', data)
由于你对结构一无所知,所以这是基于以下猜测:
title
字段是一个最长 32 个字节的字符串,因为它是文本字符串,第 32 个字节始终是0
.args
字段是一个最长为 8 个字节的字符串,因为当您假设... 时剩下的就是这个字符串
- 四个 "floats" 中的每一个都是 8 个字节长,因此,从技术上讲,一个
double float
。最后 8 个字节总是0
。这是一个有效的双数(0
,实际上);它们之前的 8 个字节都是大端格式的有效浮点数,这就是 2 个有效的浮点数。所以,往回数,另外16个0一定是另外2个值,剩下的几个字节一定属于args
字段。
运行 所提供数据的 unpack
给出了这个结果:
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.1066905392564757 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10668132073594472 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10571479478158681 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10315484049525485 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.09594104835265774 0.0
唯一值得注意的是,在四个浮动项目中,只有一个似乎实际使用过。