读取二进制文件并在python中检查匹配的字符

问题描述 投票:0回答:1

我想逐字节扫描GPS接收器中的数据文件(实际上这将是一个连续的流程,不希望使用脱机数据测试代码)。如果找到匹配项,则检查接下来的2个字节的“长度”,并获取接下来的2个字节,并向右移动2位(非字节),依此类推。我以前没有处理过二进制文件,因此陷入了一个简单的任务。我可以逐字节读取二进制文件,但找不到找到所需模式(即D3)进行匹配的方法。

with open("COM6_200417.ubx", "rb") as f:
byte = f.read(1)  # read 1-byte at a time
while byte != b"":
    # Do stuff with byte.
    byte = f.read(1)
    print(byte) 

输出文件是:

b'\x82'
b'\xc2'
b'\xe3'
b'\xb8'
b'\xe0'
b'\x00'
b'@'
b'\x13'
b'\x05'
b'!'
b'\xd3'
b'\x00'
b'\x13'

....如何检查该字节是否=='\ xd3'? (D3)也想知道如何按位移位,因为我需要检查由6位组成的十进制值(1字节和下一个字节的前2位)。考虑先取2个字节(8位)再右移2位获得6位。有可能在python中吗?任何改进/增加/更改都非常感谢。

ps。我可以从前面摆脱那个讨厌的“ b”吗?但是如果忽略它不会影响,那么就没有问题。

谢谢。

python binary byte bit-shift nmea
1个回答
0
投票

'那个字节'在前面用b''表示,表示它是一个字节对象。要摆脱它,可以将其转换为int:

byteint = int(thatbyte, 16)

进行比较,您可以这样做:

thatbyte == b'\0xd3'

因此将一个字节对象与另一个字节对象进行比较。移位<

© www.soinside.com 2019 - 2024. All rights reserved.