You need to enable JavaScript to run this app. Python通过UDP Socket发送十六进制数值列表报错TypeError如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Python通过UDP Socket发送十六进制数值列表报错TypeError如何解决

问题原因

你遇到的类型报错核心有两个可能的诱因:

  • 你的frames_to_send列表中混入了bytes类型的元素(比如误将单字节值写为b'\x00'而非整数0x00),在构造bytearray时会触发该类型错误
  • Python 3的UDP socket sendto方法原生要求第一个入参为bytes类型,部分版本的socket实现不支持直接传入bytearray可变二进制序列
正确实现方案

方案1:直接构造bytes对象(兼容性最高,适配所有Python 3版本)

frames_to_send = [0x00, 0x01, 0x02, 0x03, 0x05]
# 可选校验:确保所有元素都是0-255范围内的合法单字节整数
for val in frames_to_send:
    if not isinstance(val, int) or val < 0 or val > 255:
        raise ValueError(f"非法值 {val}:必须为0-255区间的整数")
# 转换为bytes类型后发送
UDPServerSocket.sendto(bytes(frames_to_send), ("127.0.0.1", 5555))

方案2:需修改二进制内容时使用bytearray

如果发送前需要对二进制内容做增删改操作,可以先构造bytearray操作完成后再转bytes发送:

frames_to_send = [0x00, 0x01, 0x02, 0x03, 0x05]
frame_buf = bytearray(frames_to_send)
# 示例:修改第三个字节的数值
frame_buf[2] = 0xff
# 转成bytes后发送
UDPServerSocket.sendto(bytes(frame_buf), ("127.0.0.1", 5555))
接收端适配说明

C语言接收端可直接按char数组读取收到的报文,内容和你定义的十六进制列表顺序完全一致,单字节序列不存在字节序转换问题,和你之前发送字符串的接收逻辑完全兼容,无需额外修改接收端代码。

内容的提问来源于stack exchange,提问作者deepan muthusamy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:06:00