|
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 15
|
|
Кодирование даты-времени, ищу ключ к протоколу обмена24.04.2017, 00:48. Показов 3111. Ответов 12
Метки нет (Все метки)
Привет,
есть программа которая общается с сервером. Пытаюсь пропарсить протокол. Есть последовательность байт, которая однозначно соответствует дате-времени. 8A B8 CC A1 F2 56 означает 20:00:00 C6 C6 C9 A1 F2 56 означает 19:59:36 Последний байт 56 точно соответствует 2017 году, так как в прошлом году здесь проходил байт 55. Нужно выудить время. Уже голову сломал, помогите пожалуйста!!!
0
|
|
| 24.04.2017, 00:48 | |
|
Ответы с готовыми решениями:
12
Организация обмена по сети RS-485 с ПЛК CP317 по протоколу Modbus ASCII Надо дописать!Ассемблер вывод системной даты,времени и даты ближайшего воскресенья Вывод системной даты, времени и даты ближайшего воскресенья |
|
|
|
| 24.04.2017, 06:48 | |
|
Соберите хотя бы штук по 5 данных для одинаковых и разных часов, минут и секунд.
Например 20:00:00 20:00:10 20:00:15 20:00:20 20:00:59 10:00:00 11:00:00 12:00:00 13:00:00 14:00:00 15:01:00 15:02:00 15:03:00 15:04:00 15:05:00
0
|
|
|
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 15
|
|
| 25.04.2017, 01:09 [ТС] | |
|
с кодом 56:
08 A6 E5 F7 8F F4 56 надо получить 17:25:16, где A6 E5 F7 8F F4 56 по алгориму VarInt равно 1107161782 08 CE B0 F4 8F F4 56 надо получить 17:24:48, где CE B0 F4 8F F4 56 по алгориму VarInt равно 1107106558 08 E4 BC DE 8F F4 56 надо получить 17:21:48, где E4 BC DE 8F F4 56 по алгориму VarInt равно 1106747124 08 B2 DD C5 8F F4 56 надо получить 17:18:26, где B2 DD C5 8F F4 56 по алгориму VarInt равно 1106341554 08 FA EE BF 8F F4 56 надо получить 17:17:38, где FA EE BF 8F F4 56 по алгориму VarInt равно 1106245626 08 E2 EC BB 8F F4 56 надо получить 17:17:05, где E2 EC BB 8F F4 56 по алгориму VarInt равно 1106179826 08 E6 C7 AE 8F F4 56 надо получить 17:15:16, где E6 C7 AE 8F F4 56 по алгориму VarInt равно 1105979382 без кода 56: 08 BE CF F1 8F 0B 17:20:31 Декодируем BE CF F1 8F 0B по алгоритму VarInt превращаем в 2986108862, затем делим на 2000, делим на 86400 и получаем 17,280722581018518518518518518519 что есть 17 часов (целые) и 0.28072258 после запятой (или 16 минут 50 секунд), т.е. не совсем точно что хотелось. 4 минуты потерялись. А может это вообще подгонка. 08 F6 CA F1 8F 0B надо получить 17:15:39 Декодируем F6 CA F1 8F 0B по алгоритму VarInt превращаем в 2986108278, затем делим на 2000, делим на 86400 и получаем 17,280719201388888888888888888889 что есть 17 часов (целые) и 0.2807192 после запятой (или 16 минут 50 секунд), т.е. не совсем точно что хотелось. 4 минуты потерялись. А может это вообще подгонка. 08 E6 C7 F1 8F 0B надо получить 17:12:19 Декодируем E6 C7 F1 8F 0B по алгоритму VarInt превращаем в 2986107878, затем делим на 2000, делим на 86400 и получаем 17,280716886574074074074074074074 что есть 17 часов (целые) и 0.2807169 после запятой (или 16 минут 50 секунд), т.е. не совсем точно что хотелось. 4 минуты потерялись. А может это вообще подгонка. Добавлено через 5 минут в том смысле что иногда время приходит в двух форматах, с кодом 56 в конце, или без него. Добавлено через 14 минут 08 C0 CB CF 91 F4 56 надо получить 17:54:44 где C0 CB CF 91 F4 56 равно 1110877942 08 86 E7 DE 91 F4 56 надо получить 17:56:48 где 86 E7 DE 91 F4 56 равно 1110946742 Добавлено через 6 минут Там где нет кода 56, разница между двумя данными означает, что одна секунда представлена в виде двойки. Т.е, например 2986108862 минус 2986108278 соответствует разнице в секундах между 17:20:31 и 17:15:39 умноженной на два. Но это относительно между ними, и когда знаешь во что пересчиать. А как узнать абсолютное значение? Как будто делить надо не на 86400, а на какое-то другое число, будто в сутках может быть чуть чуть больше или чуть чуть меньше секунд... бред. Добавлено через 5 минут 08 DC C2 B4 92 F4 56 надо получить 18:08:30, где DC C2 B4 92 F4 56 равно 1112351740
0
|
|
|
|
||
| 25.04.2017, 06:58 | ||
|
Или это ваше предположительное время, которое должно быть там? Или вообще время фиксации сообщения? Добавлено через 17 минут Помимо времени, указывайте ещё и дату.
0
|
||
|
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 15
|
|
| 25.04.2017, 22:41 [ТС] | |
|
Все даты в моем втором посте - 24 апреля 2017.
Время указанное там - фактически то что должно быть после расшифровки, т.к. пока что у меня есть "дешифратор". Алгоритм дешифратора неясен, и есть необходимость от него отказаться, написав свой. Добавлено через 5 минут Вот где-то я рядом. А именно: берем код там где нет 56. Наример, вот этот: 2986108862 Мы знаем уже, что одна секунда представлена в виде двойки. Значит 2986108862 делим на 2, получаем время в секундах. С какого момента, или другими словами, какое время обозначено за ноль? Считаем: 2986108862/2 = 1493054431 1493054431/ 86400 = 17280,722581018518518518518518519 Это ДНИ. Поделим на 365 чтобы узнать сколько в этой цифре содержится лет: Ответ 47,344445427447995941146626078133 Вычтем из сегодняшней даты 47 лет и получим 1970 год. Начало Unix-эпохи? ммм... Неужели это просто Unix время умноженное на два? ГЫ идем на онлайн-конвертер, http://www.onlineconversion.com/unix_time.htm вводим 1493054431 и получаем: Mon, 24 Apr 2017 17:20:31 GMT Твою кочерыжку.... Остался вопрос по данным где есть 56. что это за зверь пока разбираюсь. Но тоже где-то также надо действовать.
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|
| 25.04.2017, 22:42 | |
|
А что за секретная программа? Почему не посмотреть алгоритм в ней с помощью декомпилятора?
0
|
|
|
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 15
|
|
| 25.04.2017, 23:00 [ТС] | |
|
Идем дальше.
с кодом 56: 08 A6 E5 F7 8F F4 56 надо получить 17:25:16, где A6 E5 F7 8F F4 56 по алгориму VarInt равно 1107161782 08 E2 EC BB 8F F4 56 надо получить 17:17:05, где E2 EC BB 8F F4 56 по алгориму VarInt равно 1106179826 Откуда вычисляем что одна секунда это примерно 2000. Тогда 1107161782 / 2000 = 553580,891 секунд... Начиная с какой даты? 553580,891 делим на 86400, получаем кол.дней = 6,4071862384259259259259259259259... Затык. что это еще?? Добавлено через 58 секунд что за программа - торговый терминал на бирже. Уже свой написал по тем же данным, так как весь протокол разобрал по косточкам уже. Даты-время осталось. Пока что ставил везде локальное время, когда данные пришли. но пора и эту заглушку порешать.
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
||||||
| 25.04.2017, 23:50 | ||||||
Сообщение было отмечено gordom как решение
Решение
С 0x56 в конце все просто, там время в миллисекундах...
1
|
||||||
|
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 15
|
|
| 26.04.2017, 23:28 [ТС] | |
|
++++
Спасибо!!!! Добавлено через 2 минуты Что за алгоритм такой decode_unsigned_varint? Добавлено через 53 секунды нашел здесь http://stackoverflow.com/quest... ux-sockets Получается в одном протоколе используются разные VarInt алгоритмы, один который я разгадал - один ваш. Хм...
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
||
| 27.04.2017, 01:37 | ||
|
0
|
||
|
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 15
|
|||||||||||
| 27.04.2017, 10:53 [ТС] | |||||||||||
|
По моему алгоритму A6 E5 F7 8F F4 56 равно 1107161782, по вашему - 2986109432486
значит они в чем-то разные, я теперь допускаю что где-то ошибся в переводе с языка с++ на дельфи. Оригинал я браз здесь https://techoverflow.net/2013/... ers-in-cc/
В дельфи перевел так:
Добавлено через 29 минут в смысле отличается от вашего.
0
|
|||||||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|||||||||||
| 27.04.2017, 14:51 | |||||||||||
|
У меня что ваш, что найденный мной код работают корректно...
0
|
|||||||||||
|
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 15
|
||||||
| 28.04.2017, 00:39 [ТС] | ||||||
|
Долбаный дельфи. Оказывается побитовый сдвиг там по умолчанию 32-битный, если специально не указать.
Исправил код, все заработало:
0
|
||||||
| 28.04.2017, 00:39 | |
|
Помогаю со студенческими работами здесь
13
Приложение для обмена денег на ключ
Почему при записи даты и времени из формы в бд, к времени прибавляется час?
Ищу ключ mikroPascal PRO for AVR 3.5 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|