我的字节串中的这些额外字符是什么?

What are these extra characters in my byte strings?

我有一个 Python 3 脚本可以从一些低功耗蓝牙传感器获取数据。我得到的数据是 20 字节的字符串,但看起来有一些额外的字符以及典型的 \x00 字节。这些额外的字符是什么?为什么它们出现在字符串中看似随机的位置?

这是我从传感器获得的一大块字节字符串。

b'\x96\x80G\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'
b'\xb1\xc1G\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'
b'\xcc\x02H\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'
b'\xe7CH\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'
b'\x02\x85H\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'
b'\x1d\xc6H\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'
b'8\x07I\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'
b'SHI\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'
b'n\x89I\x92\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f\x00\x00\xc0\x7f'

例如,第一行有一个块表示 \x80G。倒数第二行以 SHI 开头。这是什么意思?

谢谢。

如果字节数据是 ASCII 字符,则将显示该字符而不是 \xXX 转义码。因此,例如 b'G'b'\x47' 相同,b'S'b'\x53' 相同,等等

至于这个值到底是什么意思,我不能告诉你。我不熟悉你在这里使用的协议。

正如在另一个答案中指出的那样,SHI 只是打印到屏幕上的二进制值的产物。

用于打印值以避免发生这种情况的几个选项是:

Python 3.7.3 (default, Dec 20 2019, 18:57:59) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> sensor_data = b'\x53\x48\x49\x92\x00'
>>> sensor_data
b'SHI\x92\x00'
>>> list(sensor_data)
[83, 72, 73, 146, 0]
>>> [hex(x) for x in sensor_data]
['0x53', '0x48', '0x49', '0x92', '0x0']
>>> [f'{x:02x}' for x in sensor_data]
['53', '48', '49', '92', '00']
>>>