我想逐字节扫描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”吗?但是如果忽略它不会影响,那么就没有问题。
谢谢。
'那个字节'在前面用b''表示,表示它是一个字节对象。要摆脱它,可以将其转换为int:
byteint = int(thatbyte, 16)
进行比较,您可以这样做:
thatbyte == b'\0xd3'
因此将一个字节对象与另一个字节对象进行比较。移位<