在 python 中向二进制字符串添加单个反斜杠
Adding single backslash to binary string in python
我正在通过 RS232 与一台设备通信,它似乎只有在以下列格式发出命令时才能正确解释命令:
b'\xXX'
例如:
equipment_ser.write(b'\xE1')
参数是可变的,所以我在格式化命令之前转换为十六进制。我很难想出一种一致的方法来确保在保留十六进制命令的同时只有 1 个反斜杠。我需要整个范围 - \x00 到 \xFF。
一种方法是使用 'unicode escape':
setpoint_command_INT = 1
setpoint_command_HEX = "{0:#0{1}x}".format(setpoint_command_INT,4)
setpoint_command_HEX_partially_formatted = r'\x' + setpoint_command_HEX[2:4]
setpoint_command_HEX_fully_formatted = setpoint_command_HEX_partially_formatted.encode('utf_8').decode('unicode_escape')
上面的例子工作正常:
Out[324]: '\x01'
但不适用于代码处理更改它的大数字:
setpoint_command_INT = 240
Out[332]: 'ð'
如何设置此命令的格式,以便在保留整个范围 0-255 的命令能力的同时使用单个反斜杠?
谢谢
编辑:
正确的做法如下面迈克尔所说:
bytes((240,))
感谢您的及时回复。
在您的代码中,您发送的是一个字节
equipment_ser.write(b'\xE1')
换句话说,您发送的是十进制数 225,但作为单个字节发送。
对于 0-255 范围内的任何整数值,您可以通过以下方式创建其等效字节:
import sys
N = 225 # for example
b = N.to_bytes(1, sys.byteorder)
equipment_ser.write(b)
我正在通过 RS232 与一台设备通信,它似乎只有在以下列格式发出命令时才能正确解释命令:
b'\xXX'
例如:
equipment_ser.write(b'\xE1')
参数是可变的,所以我在格式化命令之前转换为十六进制。我很难想出一种一致的方法来确保在保留十六进制命令的同时只有 1 个反斜杠。我需要整个范围 - \x00 到 \xFF。
一种方法是使用 'unicode escape':
setpoint_command_INT = 1
setpoint_command_HEX = "{0:#0{1}x}".format(setpoint_command_INT,4)
setpoint_command_HEX_partially_formatted = r'\x' + setpoint_command_HEX[2:4]
setpoint_command_HEX_fully_formatted = setpoint_command_HEX_partially_formatted.encode('utf_8').decode('unicode_escape')
上面的例子工作正常:
Out[324]: '\x01'
但不适用于代码处理更改它的大数字:
setpoint_command_INT = 240
Out[332]: 'ð'
如何设置此命令的格式,以便在保留整个范围 0-255 的命令能力的同时使用单个反斜杠?
谢谢
编辑:
正确的做法如下面迈克尔所说:
bytes((240,))
感谢您的及时回复。
在您的代码中,您发送的是一个字节
equipment_ser.write(b'\xE1')
换句话说,您发送的是十进制数 225,但作为单个字节发送。
对于 0-255 范围内的任何整数值,您可以通过以下方式创建其等效字节:
import sys
N = 225 # for example
b = N.to_bytes(1, sys.byteorder)
equipment_ser.write(b)