Задать вопрос
@lavrenkov-sketch

Как раскодировать строку байтов на python?

Изначально сокет отправляет питону
14:46:37:820 отправлено: 33 байт
 7e 41 01 00 00 00 00 00 10 1d 43 a1 5f 01 1d 43
 a1 5f 30 c4 55 01 f0 a8 fb 01 00 00 00 00 00 00 e4

~A  Size = 1
numPage = 0  Code = 4096  Time = 1604403997  StateGauge = 1  LastTime = 1604403997  Lat = 22398000  Lon = 33270000  Speed = 0  Course = 0

В сам питон приходит
b'~A\x01\x00\x00\x00\x00\x00\x10\x1dC\xa1_\x01\x1dC\xa1_0\xc4U\x01\xf0\xa8\xfb\x01\x00\x00\x00\x00\x00\x00\xe4'


Код питона:
spoiler
import socket
import re

# Задаем адрес сервера
SERVER_ADDRESS = ('localhost', 8686)

# Настраиваем сокет
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(SERVER_ADDRESS)
server_socket.listen(10)
print('server is running, please, press ctrl+c to stop')

# Слушаем запросы
# Особенности протокола
while True:
    connection, address = server_socket.accept()
    print("new connection from {address}".format(address=address))
# Соединение всегда инициализирует навигатор, через handshake  мы должны ему сразу ответить!
#	0x40, 0x4e, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x5e,0x2a, 0x3c, 0x53,
#    connection.send(bytes('@NTC\x40\x4e\x54\x43\x00\x00\x00\x01\x00\x00\x00\x03\x00\x45\x5e*<S', encoding='UTF-8'))

#Согласование протокола  FLEX v1
#protocol answer
#0x40, 0x4e, 0x54, 0x43,0x00,0x00,0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0xb1, 0xa0, 0x2a, 0x3c, 0x46, 0x4c, 0x45, 0x58, 0xb0, 0x0a, 0x0a,
#    connection.send(bytes('x40\x4e\x54\x43\x00\x00\x00\x00\x00\x01\x00\x00\x00\x09\x00\xb1\xa0\x2a\x3c\x46\x4c\x45\x58\xb0\x0a\x0a', encoding='UTF-8'))
    
    while 1:
        data = connection.recv(8192)
        print(data)
        results = [
            dict(re.findall(r"(\d{4})([\d.]+)", string))
            for string in filter(
            bool,  # non-empty
            data.decode('ascii', 'ignore').split("&&"),
        )
        ]
        print(data.decode('ascii', 'ignore'))
        print(data.decode('cp866'))


В чём моя ошибка, или это какие-то не те байты?)
  • Вопрос задан
  • 351 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
NeiroNx
@NeiroNx
Программист
Используйте struct.unpack() это лучший друг всех реверсинженеров.
a = b'\x7e\x41\x01\x00\x00\x00\x00\x00\x10\x1d\x43\xa1\x5f\x01\x1d\x43\xa1\x5f\x30\xc4\x55\x01\xf0\xa8\xfb\x01\x00\x00\x00\x00\x00\x00\xe4'
Size,numPage,Code,Time,StateGauge,LastTime,Lat,Lon,Speed,Course, = struct.unpack("<2xBIHIBIIIHH",a[:30])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽