我在Python中创建一个方法,它将采用一个数字,它将形成一个字节字符串,然后将其发送到Arduino。但是每当我尝试时,转义字符总是包含在最后的字节字符串中。
以下是我正在使用的代码片段:
num = 5
my_str = '\\x4' + str(num)
my_str.encode('utf-8')
结果:
b'\\x45'
我尝试了另一种方法:
num2 = 5
byte1 = b'\\x4'
byte2 = bytes(str(num2), 'ISO-8859-1')
new_byte = byte1 + byte2
new_byte
结果:
b'\\x45'
尝试以不同的方式:
num = 5
u = chr(92) + 'x4' + str(num)
u.encode('ISO-8859-1')
结果:
b'\\x45'
我想让字节字符串为b' \ x45'没有逃脱的角色,但不确定我错过了什么。我将非常感谢能够实现这一目标的任何指示。
答案 0 :(得分:4)
你的问题是你已经逃过了反斜杠。不建议使用未知变量构造文字,特别是如果有更简单的方法,那就是:
def make_into_bytes(n):
return bytes([64 + n])
print(make_into_bytes(5))
此输出
b'E'
请注意,这不是一个错误,因为这只是0x45的值:
>>> b'\x45'
b'E'
这个功能的工作方式基本上就是手工完成。前置' 4'到一个十六进制字符串(长度为1)与向它添加4 * 16相同,即64.然后我构造一个字节对象。请注意,我假设n是一个整数,就像在代码中一样。如果n应该是'a'
之类的数字,那么这将是整数10
。
如果您希望它能够处理十六进制数字而不是整数数字,则需要将其更改为:
def make_into_bytes(n):
return bytes([64 + int(n, 16)])
print(make_into_bytes('5'))
print(make_into_bytes('a'))
带输出
b'E'
b'J'
这非常简单地首先从基数16转换数字。
答案 1 :(得分:1)
您可以使用内置函数chr()
将整数转换为相应的字符:
>>> chr(0x40 + 5)
'E'
或者,如果您只是一个获得字母表的第n个字母,那么使用str.ascii_uppercase
>>> string.ascii_uppercase[5 - 1]
'E'
请注意,此答案中的结果是Python 3中的字符串,而不是bytes
个对象。只需在其上调用.encode()
即可将其转换为bytes
。