簡體   English   中英

將UDP組播信號導入Python

[英]Importing UDP Multicast signal into Python

我目前正在嘗試將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)

現在,最后一行(print sock.recv(51))似乎指示Python將接收緩沖區的內容輸出為ASCII字符串。 有人告訴我必須將緩沖區數據轉換為字節數組,然后從所需的數組中獲取元素。 假設我有一個由51個元素組成的數組,並且我想知道通道5上的電壓是多少,那么我將從數組中獲取元素18(高字節)和19(低字節)並將其轉換為短整數( 16位值)。 有人告訴我可以使用Python的struct.unpack函數: https ://docs.python.org/3.0/library/struct.html。

我自己只有基本的Python編程技能,所以所有這些對我來說都是新領域。 閱讀文檔后,在我看來struct.unpack函數需要兩個參數。 第一個指定了首先打包數據的方式。 就我而言,這是“ 4sl”; 我正在將四個字符后跟一個長整數寫入一個字節向量。 第二個參數必須說明必須解壓縮哪些數據。 使用struct.unpack(“ 4sl”,sock.recv(51)返回錯誤消息,即“ unpack需要長度為8的字符串參數”。這很有意義,因為sock.recv(51)只是提供了我的實時內容接收緩沖區遠遠超出了這個長度。我必須承認我有點茫然。如果有人可以幫助我,我將非常感謝。

因為你有python 2.7 recv將返回一個字節數組

每個字符是一個字節

要將其更改為51個int,只需將其映射為int

bytestring = sock.recv(51)
[int(ch) for ch in bytestring]

您可以使用struct更智能地解壓縮字節

struct.unpack_from("bbb",bytestring) 

會解壓縮3個字節

struct.unpack_from("Hh",bytstring)

會解壓縮一個無符號的short,然后從字節串中解一個有符號的short,依此類推

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM