что такое tlv (tag-length-value)? - PullRequest
       29

что такое tlv (tag-length-value)?

21 голосов
/ 10 декабря 2010

Что такое ТЛВ?

Поместить в код хуки (функции) вместо if / else?

если у меня есть один фрагмент кода, работающий на разных платформах, в разных местах кода, я могу поставить хуки функции tlv, чтобы определить, на какой платформе я работаю, и делать соответственно Или что-то типа того?

преимущества могут быть чище код? легко поддерживать? Когда добавляется новая платформа, нужно изменить только код tlv, а не исходный код?

Я могу быть совершенно неправ здесь.

Ответы [ 7 ]

27 голосов
/ 10 декабря 2010

TLV - кодирование значения длины тега.Часто на него лучше ссылаться по его оригинальному имени, type-length-value.

Первое поле - это «тип» обрабатываемых данных, второе поле задает «длину» значения, третьеполе содержит количество «длины» данных, представляющих значение для «типа».

В одном и том же сообщении можно передать несколько частей данных, добавив больше триплетов к ранее существующему сообщению.

В википедии есть страница, в которой об этом чуть подробнее .Не смущайтесь, хотя каждый триплет является описанием «верхнего уровня», обычно в TLV нет вложенности элементов (хотя можно придумать способ сделать это, кодируя триплеты TLV в V другого тега).

12 голосов
/ 10 декабря 2010

TLV - это способ хранения данных, облегчающий быстрый анализ этих данных.

Как правило, вы читаете тип (тег), длину и значение, а затем отправляете эти данные в функцию процессора. Эта функция только для функций процессора будет заключаться в обработке типа X. Затем вы читаете следующий тип, его длину и значение и отправляете его соответствующему процессору.

Обычно он используется как простой способ обработки данных без дополнительных затрат.

5 голосов
/ 07 ноября 2014

Мы все еще используем TLV для форматирования данных. И если мы хотим отправить данные получателю, мы подготовим пакет TLV, содержащий данные Tag-Length-Value. Например;

Data Tag = DF 82 0A   
Data Length = 03  
Data Value =  30 31 32. 

когда мы хотим отправить его, мы объединяем эти 3 строки данных, такие как DF 82 0A 03 30 31 32. Пакеты данных могут содержать много таких данных.

Когда получатель получает его, анализировать пакет очень легко, и получатель может беспрепятственно анализировать все данные.

Анализ данных;

Данные: DF 82 0A 03 30 31 32 DF 82 0B 04 01 12 22 33

DF 82 0A и DF 82 0B - это предварительно определенные теги (тип значения (BCD, HEX, ASCII)). Когда данные поступают, в цикле, во-первых, парсер будет искать тег (т.е. DF 82 0A) и еще один байт (data len). Он также будет считывать байты данных вплоть до len.

3 голосов
/ 20 марта 2013

TLV относится к значениям кодирования в трио Type-Length-Value, и эта более общая форма документирована в WikiPedia .

В некоторых контекстах (например, EMV) TLV относится к более конкретному X.690, который также задокументирован в WikiPedia .

TLV имеет следующие преимущества:

  • Относительно компактный формат кодирования
  • Относительно прост в разборе (за пару часов я написал базовый парсер X.690)
  • В TLV X.690 есть поддержка вложенных типов (эту часть немного сложнее разобрать, но из того, что я могу сказать, не требуется для EMV) * ​​1016 *

Самым большим недостатком TLV является то, что он не читается непосредственно человеком. Тем не менее, обратите внимание, что если данные преобразуются в шестнадцатеричные, их трудно читать умеренно.

1 голос
/ 10 декабря 2010

Я думаю, что то, что вы имеете в виду, называется Тип Длина Значение , и для этого есть википедия страница .Надеюсь, это поможет.

0 голосов
/ 23 февраля 2018

TLV полезен для создания протоколов связи.Вы используете тег, длину, значение для хранения информации.Вы можете увидеть очень красивую реализацию (я думаю, что лучше) на github .

0 голосов
/ 16 декабря 2016

TLV: тег - длина - значение

ПРИМЕР: 045002124354

Если мы взяли в качестве примера, что в конфигурации: 045 означает
выигрышный номер в телешоу так: значение выигрышного номера составляет: 12

  • TAG : Поиск по тегу: 045
  • ДЛИНА : длина, например, на 3 позиции, поэтому: 002
  • ЗНАЧЕНИЕ : Теперь значение равно: 12 (на 2 позиции)
...