从串行端口的二进制数据构造一个十六进制数组

Constructing a hex array from binary data from serial port

我有一个外部设备,串行连接到 PC。 数据是二进制的,不是字符,这意味着我不应该将数据解释为 ASCII 字符。

在 PC 中,我有 Python 3.7 使用 pyserial 读取串口设备。 我想用传入的数据填充一个 int8 数组。

我正在使用线程,这是我目前的状态,但这不是我的第一段代码,我已经尝试了几种方法,none 其中有效。

def get_data(sent, m_serport)
    constr_resp = np.int8([0])
    resp = np.int8([0])
    resp_index = 0

        while (1):
            if (m_serport.in_waiting > 0):
                resp = master_ser.read(1)
                constr_resp = np.concatenate(constr_resp, resp)
                resp_index = resp_index + 1
                parse(constr_resp, resp_index)

这一个生成以下错误: 类型错误:'bytes' 对象不能解释为整数

我有很强的 C 背景,Python 在数据类型方面让我很困惑。

我希望我的问题很容易理解。

谢谢。

Kostbil,使用 python 访问外部数据可能有点棘手,但请相信我,这没什么大不了的。在这种情况下,如果您知道错误在哪一行,调试可能会更容易... 您也可以使用 print() 进行调试。

在我看来,您可以在执行任何整数运算之前对从外部获取的数据调用解码方法,即 .decode()。比如说,externalData.decode()

希望这有效。

我认为获取数据应该从构建字节列表开始:

def get_data(sent, m_serport)
    alist = []
    resp_index = 0
        while (1):
            if (m_serport.in_waiting > 0):
                resp = master_ser.read(1)
                alist.append(resp)
                resp_index += resp_index
                # parse(alist, resp_index)
    return alist

您可能不需要 resp_index,因为它应该只是 len(alist)。此外,我认为您不希望在此循环中使用 parse,但我不知道它应该做什么。