Python 如何将串行端口的整数转换为二进制
我试图通过串行端口发送一个值。我不确定如何将其转换为正确的格式。我尝试了binary和format()的bin(),但没有成功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
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()
方法接受字节字符串参数,而不是二进制表示的字符串参数。您正在使用的发布模块会有很大帮助,但请忘记它。