#python
#python
Вопрос:
Я хочу перехватить разделитель 7E, но у меня проблема.
пакет: 7E 0011B81123423B303B303B393 7E 8
Если 1 байт состоит из 2 символов, это будет выглядеть так: 7E 00 11 B8 11 23 42 3B 30 3B 30 3B 39 37 E8
packet = b'7E0011B81123423B303B303B3937E8'
packet_res = packet.split(bytes(b'7E'))
print(packet_res)
>>> [b'', b'0011B81123423B303B303B393', b'8']
Предполагается, что это один, и в результате у меня их два.
Комментарии:
1. какой результат вы ожидаете?
7E 00 11 B8 11 23 42 3B 30 3B 30 3B 39 37 E8
?2. Мне нужен один пакет, разделитель равен 7E. И здесь он видит два пакета, потому что появляется второй 7E, но не в одном байте.
Ответ №1:
Вы можете попробовать это:
packet = b'7E0011B81123423B303B303B3937E8'
if packet.decode('utf-8').startswith('7E'):
print([x for x in re.split(r'(w{2})', packet.decode('utf-8')) if x]) # first
print(' '.join([x for x in re.split(r'(w{2})', packet.decode('utf-8')) if x])) #second
вывод:
['7E', '00', '11', 'B8', '11', '23', '42', '3B', '30', '3B', '30', '3B', '39', '37', 'E8'] #first
7E 00 11 B8 11 23 42 3B 30 3B 30 3B 39 37 E8 #second
Ответ №2:
Попробуйте регулярное выражение:
import re
packet = b'7E0011B81123423B303B303B3937E8'
print(' '.join(re.findall('..',''.join(re.findall('(7E.*)7E',str(packet))))))