【问题标题】:Python : How to convert Bytes like object to Array of uint16?Python:如何将对象之类的字节转换为 uint16 数组?
【发布时间】: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


【解决方案1】:

假设data 是偶数个字节,表示 16 位数据:

>>> import array
>>> data = bytes([1,0,2,0,3,0,4,0,5,0])
>>> data
b'
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 2018-09-08
  • 2018-02-14
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多