将输入的十六进制 0A 转换为 \n 转义字符

问题描述

我正在使用网页获取十六进制数据以使用 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 控制台如何显示输出字符串 - 处理其内容可能更重要。