问题描述
我正在使用网页获取十六进制数据以使用 python 编写串行 modbus
问题是字符串中的 0A
被转换为 \n
。
如何阻止这种情况发生?
rList = r'0106000600000AE9CC'
arr=str(rList)
arr = bytes.fromhex(rList)
print(arr)
输出:
b'\x01\x06\x00\x06\x00\x00\n\xe9\xcc'
解决方法
试试这个
def print_me(thing: bytes):
print(''.join(
f'\\x{byte:02x}'
for byte in thing
))
print_me(bytes.fromhex("0106000600000AE9CC"))
输出:
\x01\x06\x00\x06\x00\x00\x0a\xe9\xcc
,
字符串前的 b
符号表示您有一个字节列表。当您打印它时,python 会尽可能尝试对字节进行解码,以便为简单起见用符号表示它们。
Byte b'\x0A'
对应十进制值 10,它是一个 newline symbol in ascii。这就是为什么你会打印这个符号。
在底层,您的字节 b'\x0A'
没有改变。
字节对象的 repr() 表示尽可能使用 ASCII 代码点。
这意味着 \x0A
将显示为 \n
,因为这是换行符的 ASCII 代码点。
更多例子:\x55
将显示为 U
,\x5A
将显示为 Z
,\x0D
将显示为 {{1 }},
你懂的。
然而,引擎盖下的数据仍然相同。
不要担心 Python 控制台如何显示输出字符串 - 处理其内容可能更重要。