我正在尝试将UDP多播信号(EEG信号)导入Python。虽然我确实得到了一个信号,但是输出是由一系列字母、数字和符号组成的,它们不能正确显示,所以有些地方不太正确。在
我现在的代码是:import socket
import struct
MCAST_GRP = '234.5.6.7'
MCAST_PORT = 58432
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
print sock.recv(51)
现在,最后一行(打印短袜收银机(51))似乎指示Python将接收缓冲区的内容输出为ASCII字符串。我被告知必须将缓冲区数据转换为字节数组,然后从数组中获取所需的元素。
例如,我有一个51个元素的数组,我想知道通道5上的电压,然后从数组中得到元素18(高字节)和19(低字节),并将它们转换成一个短整数(16位值)。
我被告知我可以使用Python的解包结构函数:https://docs.python.org/3.0/library/struct.html。在
我自己只有基本的Python编程技能,所以所有这些对我来说都是一个新领域。在阅读了文档之后,我觉得解包结构函数需要两个参数。第一个指定了数据的打包方式。在我的例子中,这是“4sl”;我将四个字符后跟一个长整数写入字节向量。第二个参数必须声明哪些数据必须被解包。使用解包结构(“4sl”,短袜收银机(51)返回错误消息“unpack需要长度为8的字符串参数”。这很有道理短袜收银机(51)只给我接收缓冲区的实时内容,它远远超过了这个长度。我必须承认我有点不知所措。如果有人能帮我,我会非常感激的。在