Это смещение (offset) начала из bytes, откуда проводить считывание. Если на вход ровно 5 байт, то o=0;
Как раз таки реально и в "лоб". Записываем несколько десятков пакетов, смотрим идентичные байты, добиваемся, что бы менялось за раз как можно меньше (отправкой команд из RDWorks), смотрим, как много байт поменялись при общении и вычисляем, что за зависимость. В данном случае зависимость оказалась лишь однобайтная (контрольная сумма невсчёт). Так что получается всего 255 вариантов перевода. Собираем таблицу и дешифровка готова. Функцию, которую первую прислал, я уже потом где-то нашёл и решил, что в данном случае она уместнее, т.к. можно подстраивать под разные версии RDWorks. Перевод чисел - один из "стандартных" вариантов представления.
До кучи некоторые команды с описанием:
RUIDA_RDWORKS_V8.ini
Смотрите блоки [KR_N]
title - соответственно что собой представляет запрос
regexp - маска запроса. Точки обозначают, что на этом месте может быть любое значение (вначале - контрольная сумма, после - изменяемое значение аргументов).
Вы вообще с какой целью этим занимаетесь?