Есть ещё склеенные из нескольких частей сообщения и message_payload TLV. В первом случае первые 6-7 байт поля short_message будут содержать UDH, определяющий порядок склейки, а во втором случае сообщение будет находиться в другом месте.
Ручная работа с символами и их кодами лучше всего организована на unicode-table.com.
В чём глубинный смысл? Как писали выше — wireshark великолепно и сам всё декодирует (у меня, правда, не получилось уговорить его декодировать русский текст из UCS2, но это частности).
Единственное разумное объяснение — у автора есть софт, который в логи пишет hex dump отправленных/полученных PDU'шек и есть необходимость декодировать эти SMS'кт.
Тогда цель исследования ясна — сначала разобраться самому, а потом написать парсер.
По поводу длинных SMS — вероятность получить от оператора текст в message_payload существует, но она достаточно низка.
А вот UDH заголовки для длинной SMS'ки вы будете получать практически гарантированно.
Глубинный смысл показать что библиотеки, которые реализуют SMPP, не содержат ни какой магии и в случае проблем вполне можно самостоятельно выяснить что именно пошло не так и исправить. Второе значение — повышение качества запросов к техподдержке компаний, предоставляющих подключение по SMPP, все мы знаем как приятно грамотно указать на чужие ошибки :)
Инструкция к спецификации SMPP