You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何像拼接字符串一样拼接bytearray?拼接报错求助

解决Python生成串口通信bytearray的问题

你的代码报错核心原因是字节串与字符串直接拼接类型不兼容,且用字符串拼接数字的方式无法生成你需要的十六进制字节值。以下是两种简单直接的解决方案:

方案1:直接用整数列表构造bytearray(推荐)

因为你的参数fallblattadresse(0-7)和fallblattcode(0-61)都是小于256的整数,直接将它们作为字节值传入bytearray的构造函数即可,自动对应十六进制字节:

def sendfallblatt(fallblattadresse, fallblattcode):
    # <BREAK> FF <COMMAND> <ADDR> < VALUE> 
    ComPort = serial.Serial('COM5')
    ComPort.baudrate = 19200
    ComPort.bytesize = 8
    ComPort.parity   = 'N'
    ComPort.stopbits = 1
    
    # 直接用整数列表构造,每个整数对应一个字节的十六进制值
    data = bytearray([0xff, 0xc0, fallblattadresse, fallblattcode])
    print(data)  # 调用sendfallblatt(1,2)时会输出 bytearray(b'\xff\xc0\x01\x02')
    
    ComPort.send_break(0.06)
    ComPort.write(data)
    ComPort.close()

这个方案还直接解决了你担心的“数值超过9”的问题,比如传入fallblattcode=10,会自动生成0x0a字节。

方案2:字节串拼接(用to_bytes转换整数)

如果习惯用字节串拼接的方式,可以把每个整数转成1字节的字节串,再和固定字节串拼接:

data = b'\xff\xc0' + fallblattadresse.to_bytes(1, byteorder='big') + fallblattcode.to_bytes(1, byteorder='big')

to_bytes(1, byteorder='big')表示将整数转换为1字节的大端字节串,对于0-255的整数,大端小端结果一致。

原代码错误点说明

  • b'\xff\xc0\x0'是字节串,str(fallblattadresse)是字符串,二者无法直接用+拼接,会触发类型错误。
  • '\x'不是合法的Python转义字符,你想表达的十六进制字节需要用整数直接对应,而非字符串拼接。

内容的提问来源于stack exchange,提问作者Daniele V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:16