什么是tlv(标签长度值)?

时间:2010-12-10 20:36:07

标签: tlv

什么是tlv?

将钩子(函数)放在代码中而不是if / else?

如果我有一段代码在不同的平台上运行,在代码的不同位置,我可以放置tlv函数钩子来识别我所在的平台并做相应的操作?或类似的东西?

好处可以更清洁代码?容易维护?添加新平台时,只需更改tlv代码而不需要更改源代码吗?

我在这里可能完全错了。

7 个答案:

答案 0 :(得分:27)

TLV是Tag-length-value编码。通常它更好地用它的原始名称,类型 - 长度 - 值来引用。

第一个字段是正在处理的数据的“类型”,第二个字段指定值的“长度”,第三个字段包含表示“类型”值的“长度”数据量。

通过在先前存在的消息中附加更多三元组,可以在同一消息中传输多个数据。

There's a page on wikipedia covering it in just a little more detail。不要感到困惑,每个三元组都是“顶级”描述,TLV中通常没有项目嵌套(尽管你可以通过在另一个标签的V中编码TLV三元组来实现这一点)。

答案 1 :(得分:12)

TLV是一种存储数据的方式,以便于快速解析该数据。

通常,您读取类型(标记),长度和值,然后将这些数据发送到处理器函数。此处理器功能仅用于处理类型X.然后,您读取下一个类型,它的长度和值,并将其发送到适当的处理器。

它通常用作处理数据的简单方法,而无需额外的开销。

答案 2 :(得分:5)

我们仍然使用TLV进行数据格式化。如果我们想要将数据发送到接收器,我们准备一个包含Tag-Length-Value数据的TLV包。例如;

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

当我们想发送它时,我们连接这三行数据,如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)和另一个字节(数据len)。它还将读取高达len的数据字节。

答案 3 :(得分:3)

TLV指的是Type-Length-Value三重奏的编码值,以及more general form is documented on WikiPedia

在某些情境中(例如EMV),TLV指的是more specific X.690 which is also documented on WikiPedia

TLV具有以下优点:

  • 相对紧凑的编码格式
  • 解析相对简单(我在几个小时内编写了一个基本的X.690解析器)
  • X.690 TLV支持嵌套类型(这部分解析起来稍微复杂一些,但从EMV不需要我知道)
TLV最大的缺点是它不是直接人类可读的。但是请注意,如果数据转换为十六进制,则只是难以阅读。

答案 4 :(得分:1)

我认为你所指的是 Type Length Value ,并且有一个维基百科page。希望有所帮助。

答案 5 :(得分:0)

TLV:tag - length - value

示例:045002124354

如果我们以配置为例:045是
的意思         在电视节目中获胜的号码所以:中奖号码的价值是:12

  • TAG :搜索标签:045
  • LENGTH :长度例如位于3位置,所以:002
  • VALUE :现在值为: 12 (在2位置)

答案 6 :(得分:0)

TLV对于创建通信协议很有用。您可以使用标记,长度,值来存储信息。您可以看到 beautifull 实施(我认为最好)on github