【问题标题】:Pyserial - Python creating byte arrayPyserial - Python 创建字节数组
【发布时间】:2016-08-19 16:10:53
【问题描述】:

我有以下数据

a1 = 0x5A -- 十六进制

a2 = 0x01 -- 十六进制

a3 = 12 -- 十进制

a4 = 28 -- 十进制

a5 = (a1 到 a4) 的总和

我应该能够在一个字节数组中发送所有这些信息,并一次性使用 ser.write 命令发送。

目前我正在手动将 a3 和 a4 转换为十六进制,我正在使用类似 ser.write('\x5A\x01\x...\x...\x...)

我想要一种方法,我可以将所有变量打包成一个字节数组,然后说 ser.write(bytearray)

ser --- 是我的序列号。Serial('COM1')

与 ser.read 相同 - 我得到的信息是字节数组 - 我如何解码为十进制和十六进制

寻找使用binascii函数转换为字节数组和从字节数组转换回来

【问题讨论】:

    标签: python pyserial


    【解决方案1】:

    你想要一串十六进制值吗?不太清楚。

    a1 = 0x5A # hex
    a2 = 0x01 # hex
    a3 = 12 # decimal
    a4 = 28 # decimal
    a5 = sum((a1, a2, a3, a4))
    
    int_array = [a1, a2, a3, a4, a5]
    print(int_array)
    
    hex_array = "".join(map(hex, int_array))
    print(hex_array)
    

    你会得到:

    [90, 1, 12, 28, 131]
    0x5a0x10xc0x1c0x83
    

    使用array 类:

    import array
    
    byte_array = array.array('B', int_array)
    print(byte_array)
    print(byte_array.tostring())
    

    你会得到:

    array('B', [90, 1, 12, 28, 131])
    b'Z\x01\x0c\x1c\x83'
    

    【讨论】:

    • 不是十六进制值的字符串,而是一个字节数组。我可以使用 ser.write(bytearray) 发送命令
    • sum 获取溢出单个字节大小。并非总是可能的。
    • 0x5A 应该是一个字节; 0x01 应该是一个字节,12 应该是一个字节......等等。我不必使用 sum 函数
    • 我添加了一个使用array类的例子。
    • 成功了,谢谢 Laurent。您能否告诉我如何从字节数组返回到 int_array 和字符数组。类似于 ASCII 值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 2015-11-19
    • 2013-09-23
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多