template< class Tag_type, class Length_type > struct tlv_t { Tag_type m_tag; Length_type m_length; char m_value[ m_length ]; };
Например, строка "Hello", может быть представлена в виде следующей двойчной последовательности (для Tag и Length используются 8-битовые значения):
01 06 48 65 6C 6C 6F
Что расшифровывается следующим образом:
01 - Идентификатор 06 - Длина строки Hello 48 - H 65 - e 6C - l 6C - l 6F - o
Особенно удобен TLV для представления структур, полями которых так же являются структуры или принадлежат другим сложным типам (векторам, спискам, строкам переменной длины и т.п.). Каждому полю присваивается уникальный идентификатор. Благодоря уникальной идентификации поля могут следовать в двоичном потоке в любом порядке или даже отсутствовать -- при разборе по идентификатору легко определить, что нужно расшифровывать.