30

什么是 TLV?

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

如果我有一段代码在不同的平台上运行,在代码中的不同位置,我可以放置 TLV 函数挂钩来识别我在哪个平台上并相应地执行?或类似的东西?

好处可以更简洁的代码?易于维护?添加新平台时,只需要更改 TLV 代码而不需要更改源代码吗?

我在这里可能完全错了。

4

7 回答 7

39

TLV 是标签长度值编码。通常,最好用它的原始名称 type-length-value 来引用它。

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

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

维基百科上有一个页面更详细地介绍了它。不过不要混淆,每个三元组都是“顶级”描述,TLV 中通常没有项目嵌套(尽管您可以通过在另一个标签的 V 中编码 TLV 三元组来想出一种方法)。

于 2010-12-10T20:59:41.257 回答
15

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

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

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

于 2010-12-10T20:53:56.270 回答
11

我们仍然使用 TLV 进行数据格式化。如果我们想向接收者发送数据,我们会准备一个包含Tag-Length-Value数据的 TLV 包。

例如:

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)和一个字节(数据长度)。它还将读取最大长度的数据字节。

于 2014-11-07T07:32:50.480 回答
4

TLV 指的是 Type-Length-Value 三重奏中的编码值,这种更通用的形式记录在 WikiPedia 上

在某些情况下(例如 EMV),TLV 指的是更具体的 X.690,它也记录在 WikiPedia 上

TLV 具有以下优点:

  • 相对紧凑的编码格式
  • 解析相对简单(我在几个小时内编写了一个基本的 X.690 解析器)
  • X.690 TLV 支持嵌套类型(这部分解析稍微复杂一些,但据我所知,EMV 不需要)

TLV 最大的缺点是它不是直接人类可读的。但是请注意,如果将数据转换为十六进制,则读取难度适中。

于 2013-03-20T03:15:59.060 回答
1

我认为您所指的称为Type Length Value,并且有一个维基百科页面。希望有帮助。

于 2010-12-10T20:52:33.423 回答
1

TLV:标签-长度-值

示例:045002124354

如果我们以配置为例:045是
电视剧中奖号码的意思,那么:中奖号码的值为:12

  • TAG : 搜索标签是 : 045
  • 长度:例如长度在 3 个位置,所以:002
  • :现在值是:12(在 2 位置)
于 2016-12-16T17:52:43.487 回答
0

TLV 对于创建通信协议很有用。您使用标签、长度、值来存储信息。你可以在 github 上看到非常漂亮的实现(我认为是最好的)。

于 2018-02-23T19:01:28.420 回答