我正试图将带符号整数从python发送到PCB。我想通过python发送数字01,但我的PCB一直将其解释为";12592〃;当我用二进制写时,即:00110000 00110001";
每个字节是48和49-这是0和1的ascii值-所以格式有问题-我只想发送10000000和10000001,这样PCB就能正确地解释
我的代码目前非常简单——我是"发送";函数,并编写socket.send(b'01'(-然而,我在套接字模块中找不到任何其他函数来完成这项工作?有没有办法让它以带符号的int形式发送?
@Laurent H.在上面的评论中说得很对。您希望发送二进制值,而不是数字字符的ascii码的二进制等价物。
bytes([0,1]) == b'x00x01'
这是而不是您发送的内容。
相反,
ord("0") == 48
是为零获取字符的数值。
事实上,你甚至可以直接发送二进制,在这里应用你的标志:
0b10000000, 0b10000001 == (128, 129)
b'x80x81' # as byte values
如果您发送了b'01'
,它将发送文本ASCII字节值0x30、0x31。CCD_ 2,其是这些字节的小端二进制解释。
使用struct.pack('<h', n)
函数将整数n
打包为有符号的16位小端整数。
示例:
>>> import struct
>>> struct.pack('<h', 1)
b'x01x00'
>>> struct.pack('<h', 0x1213)
b'x13x12'