如何通过Python Socket模块向PCB发送有符号整数?
解决方案:发送二进制字节而非ASCII字符串
你当前用socket.send(b'01')发送的是字符0和1的ASCII编码(字节值0x30和0x31),这就是PCB解析出错误数值的原因。要发送目标二进制字节10000000(0x80)和10000001(0x81),需要直接传递对应二进制字节对象,而非字符串。
有两种常用实现方式:
方法1:直接构造字节对象
如果明确知道要发送的十六进制字节值,可以直接用bytes()构造:
import socket # 假设已建立并连接好socket对象s target_bytes = bytes([0x80, 0x81]) s.send(target_bytes)
方法2:用struct模块打包整数
如果需要从有符号整数转换为对应字节(比如0x80对应8位有符号整数-128,0x81对应-127),推荐用struct模块,它能灵活处理不同位宽的有符号/无符号整数:
import socket import struct # 打包两个8位有符号整数:-128和-127,对应目标字节 packed_data = struct.pack('bb', -128, -127) # 发送打包后的字节流 s.send(packed_data)
struct格式符说明
b:表示8位有符号整数(对应C语言的char)B:8位无符号整数h:16位有符号整数H:16位无符号整数- 若需调整字节序(大端/小端),可在格式符前加前缀,比如
>bb表示大端字节序,<bb表示小端,根据PCB的解析要求选择即可。
内容的提问来源于stack exchange,提问作者Henrik Truelsen
相关产品推荐
相关产品推荐

