【发布时间】:2022-12-06 02:32:30
【问题描述】:
我有一个来自 udp 流的类似字节的对象。
在 Matlab 中,我可以通过以下代码将字节转换为 uint16 的列向量:
% Build UDP Connection and collect binary data
udpr = dsp.UDPReceiver('LocalIPPort',5005,'ReceiveBufferSize',3200,'MessageDataType','uint16','MaximumMessageLength',640)
setup(udpr)
data = udpr();
要将列向量转换回已知宽度(16 列)的数组,我使用以下代码:
rows_result = length(data)/16;
result = zeros(rows_result,16);
pointer=0;
for i=1:rows_result
for j=1:16
result(i,j)=data(pointer+j);
end
pointer=pointer+16;
end
这样我就得到了一个 N 乘 16 的 uint16 值数组。
我怎样才能在 Python 中执行类似的操作?
我使用以下代码:
import socket
import struct
UDP_IP = "127.0.0.1"
UDP_PORT = 5005
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
value_type = type(data)
value = list(data)
print(value_type)
print(value)
函数 list() 似乎只读取第一个字节,而不是我需要的 uint16 值的前两个字节。
我试过 struct.unpack('H') 没有结果,我找不到一种方法来按照需要的方式转换我的变量“数据”。
我也试过 int.from_bytes,但我不知道如何告诉函数每 2 个字节转换一次...... 我失败了 array 模块和 array.frombytes()
我将不胜感激帮助...
此致 马克
【问题讨论】:
-
能给个
data的样本和转换后的预期结果吗? -
请阐明您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
-
print(data)所以我们知道你收到了什么
标签: python matlab udp byte uint16