将字符串“ 0x00 ...”转换为python中的bytearray

问题描述

我想通过我的COM端口发送十六进制代码以驱动引擎。 我使用此方法打开的.txt文件中包含所有十六进制代码https://openclassrooms.com/forum/sujet/convertir-fichier-tableur-csv-en-liste-sur-python,法语)。这给了我十六进制代码列表:

  • 代码[0] =“ 0X53,0X0B,0X01,0X02,0XFF,0X60,0X00,0XC2,0X45”

问题是通过我的com端口发送该代码。使用ser.write(bytearray([0X53,0X0B,0X01,0XFF,0X60,0X45]));

有效,但是我必须手动输入十六进制代码。我想从.txt中提取行,并通过COM端口发送它 这是我目前的代码

    import serial
import csv
 
def convertisseur(chemin):
    Tableau = []
    Temps = []
    Acc = []

    f = open(chemin)
    csv.reader(f,delimiter=',')

    for row in f:
        Tableau.append(row)
    
    f.close

    n = len(Tableau)
    for i in range(n-1):
        Temps.append(Tableau[i][0])
        Acc.append(Tableau[i][1])
             
    return (Tableau)

def main():
        print("TEST DE PySerial")
        print("----------------")
        print
        ser = serial.Serial('COM3',115200,timeout=1)
        ser.close()
        ser.open()
        ser.write(bytearray([0X53,0X45]));
        
        Code=convertisseur('C:/Users/Tdeba/Desktop/Cod.txt')
        ser.write(Code[0].encode())
        print(Code[0].encode())
        #ser.write(bytearray([0X53,0X45]));
        ser.close()
        return   0
    

if __name__ == '__main__':    
    
    main()

解决方法

您可以将生成器传递到bytearray构造函数中:

bytearray(int(i,16) for i in s.split(","))