Python 如何将串行端口的整数转换为二进制

Python 如何将串行端口的整数转换为二进制,python,serial-port,Python,Serial Port,我试图通过串行端口发送一个值。我不确定如何将其转换为正确的格式。我尝试了binary和format()的bin(),但没有成功 result = 2 ser.open() ser.write(b'1') time.sleep(3) ser.write(result) # wrong format ser.write("{0:b}".format(result)) # TypeError: unicode strings

我试图通过串行端口发送一个值。我不确定如何将其转换为正确的格式。我尝试了binary和format()的bin(),但没有成功

result = 2
ser.open()
ser.write(b'1')
time.sleep(3)

ser.write(result)                 # wrong format
ser.write("{0:b}".format(result)) # TypeError: unicode strings
                                  # are not supported, please
                                  # encode to bytes: '10'
第一次写入操作将“1”作为二进制字符串发送。现在我希望变量也以二进制字符串的形式发送。

write()
需要一个bytes对象

>>> help(serial.Serial.write)
Help on function write in module serial.serialwin32:

write(self, data)
    Output the given byte string over the serial port.
要将整数转换为字节,请调用

write()
需要字节对象

>>> help(serial.Serial.write)
Help on function write in module serial.serialwin32:

write(self, data)
    Output the given byte string over the serial port.
要将整数转换为字节,请调用

write()
方法接受字符串参数。您可以像这样使用
str()
内置函数将
result
转换为字符串

result=str(result)

Python 2: Python 3: 您必须以字节为单位对字符串进行编码

result = 2
ser.open()
ser.write(b'1')
time.sleep(3)

ser.write(str(result).encode('utf-8'))
write()
方法接受字符串参数。您可以像这样使用
str()
内置函数将
result
转换为字符串

result=str(result)

Python 2: Python 3: 您必须以字节为单位对字符串进行编码

result = 2
ser.open()
ser.write(b'1')
time.sleep(3)

ser.write(str(result).encode('utf-8'))
像这样:

import binascii

def write(num):
    pack = binascii.unlexlify("%04X"%num)
    ser.write(pack)
要点:设备上使用了哪种数字系统(8、16、32、64位)

8位=1字节(0-255)

16位=2字节(0-65535)

32位=4字节(如上边)(0-4294967295)

所有范围都是
无符号的
(查找),但
浮动
有额外的定义

不能用键盘键入二进制
1
值:

binascii.unlexlify(“%01X”%1)
相当于
\x01
(当然可以使用
struct
包)

如下:

import binascii

def write(num):
    pack = binascii.unlexlify("%04X"%num)
    ser.write(pack)
要点:设备上使用了哪种数字系统(8、16、32、64位)

8位=1字节(0-255)

16位=2字节(0-65535)

32位=4字节(如上边)(0-4294967295)

所有范围都是
无符号的
(查找),但
浮动
有额外的定义

不能用键盘键入二进制
1
值:


binascii.unlexlify(“%01X”%1)
相当于
\x01
(当然可以使用
struct
package)

在Python 3中,字符串与字节不同。OP的代码强烈暗示他只是Python3,我不明白你的意思。在Python3中,字符串默认为Unicode。OP只想编写变量的字符串表示形式。OP不希望将整数打包为字节,他希望将其写入字符串。请正确读取错误。该函数不接受字符串对象,而是字节对象<代码>类型错误:不支持unicode字符串,请将其编码为字节:“10”@1。OP并不意味着他正在使用Python 3。它可能也是Python2,带有来自未来导入unicode的
。2.将
结果
转换为以字节为单位的位的字符串表示是没有意义的。3.我也会更新Python 3的答案。无论他是在使用Python 3,还是在Python 2中使用unicode,我都会称赞你,根本的一点是,当函数(无论Python版本如何)明显不喜欢时,你建议使用字符串解决方案。至少你现在已经解决了这个问题,所以你的答案是好的。虽然这只是一个小细节,但您的答案有点不合常规,因为它将数字转换为字符串并将其转换为字节。一个5位数的整数将有5个字节。将数字直接转换为字节表示更为直接,但这是吹毛求疵。在Python中,字符串不同于字节。OP的代码强烈暗示他只是Python3,我不明白你的意思。在Python3中,字符串默认为Unicode。OP只想编写变量的字符串表示形式。OP不希望将整数打包为字节,他希望将其写入字符串。请正确读取错误。该函数不接受字符串对象,而是字节对象<代码>类型错误:不支持unicode字符串,请将其编码为字节:“10”
@1。OP并不意味着他正在使用Python 3。它可能也是Python2,带有来自未来导入unicode的
。2.将
结果
转换为以字节为单位的位的字符串表示是没有意义的。3.我也会更新Python 3的答案。无论他是在使用Python 3,还是在Python 2中使用unicode,我都会称赞你,根本的一点是,当函数(无论Python版本如何)明显不喜欢时,你建议使用字符串解决方案。至少你现在已经解决了这个问题,所以你的答案是好的。虽然这只是一个小细节,但您的答案有点不合常规,因为它将数字转换为字符串并将其转换为字节。一个5位数的整数将有5个字节。将一个数字直接转换为它的字节表示形式更为直接,但这是吹毛求疵。它被称为字节字符串
write()
方法接受字节字符串参数,而不是二进制表示的字符串参数。您正在使用的发布模块会有很大帮助,但请忘记它。它被称为字节字符串
write()
方法接受字节字符串参数,而不是二进制表示的字符串参数。您正在使用的发布模块会有很大帮助,但请忘记它。