我的字节串中的这些额外字符是什么?
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']
>>>
我有一个 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']
>>>