将字节解码为ascii字符串

2024-06-28 15:46:50 发布

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

我用pyserial从外部设备接收字节,格式如下:

b'S\rSN 00\rSC 00\rFC 00\rRI 00\rMF 00006643\rTS 0000BA39\rTB 00000000\rCB FFFFFFFF\rCL 002\rI> '

通过以下代码(代码段)完成:

while ser.in_waiting > 0:
    output = ser.read(ser.in_waiting)
    print(output)

所以我希望把它打印成文本,格式如下:

S
SN 00
SC 00
FC 00
RI 00
MF 00006643
TS 0000BA39
TB 00000000
CB FFFFFFFF
CL 002
I>

但是当我试图用print(output.decode())print(output.decode('ascii'))解码它时,我只得到了全部(84)个字符的一部分:

I> 002FFFFF

怎么了?如何获得所有解码文本?你知道吗


Tags: in文本output字节格式解码外部设备ser
2条回答

字符串中嵌入了回车符,终端将其解释为将光标移回当前行开头的指令,从而导致后面的文本覆盖前面的文本。你知道吗

您看到的是最后一行的I>,后面是前一行的002,前面一行的FFFFF(较短的序列不会完全覆盖行中当前的内容)。你知道吗

解决方案(这里我不会repeat;wjandrea已经发布了)是用适当的行替换回车符 喂养。你知道吗

回车符'\r'移到行首而不移到下一行,因此这些行被覆盖。只需用换行符替换回车符:

print(output.decode().replace('\r', '\n'))

我假设您使用的是Unix/Linux—不确定在Windows上是否不同。你知道吗

相关问题 更多 >