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

2024-05-13 09:56:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用网页获取十六进制数据,用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'

Tags: 数据字符串网页bytes情况modbusprintarr
3条回答

字符串前面的b符号表示您有一个字节列表。在打印时,python会尽可能地对字节进行解码,以便于用符号表示它们

字节b'\x0A'对应于十进制值10,它是一个newline symbol in ascii。这就是为什么要打印这个符号

在引擎盖下,您的字节b'\x0A'没有被更改

试试这个

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

字节对象的repr()表示形式尽可能使用ASCII码点。 这意味着\x0A将显示为\n,因为这是换行符的ASCII码点

更多示例:
\x55将显示为U
\x5A将显示为Z
\x0D将显示为\r
你明白了

然而,引擎盖下的数据仍然是相同的

不要担心Python控制台如何显示输出字符串——处理其内容可能更重要

相关问题 更多 >