【问题标题】:What is TLV (tag-length-value)?什么是 TLV(标签长度值)?
【发布时间】:2010-12-10 20:36:06
【问题描述】:

什么是 TLV?

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

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

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

我可能完全错了。

【问题讨论】:

  • 与代码无关,与数据有关。
  • @karl: (我知道这是一个旧线程,但不知何故我今天又来到这里 :) )你确定这与代码无关吗?因为我猜它是另一种方式——所有关于代码而不是关于数据。 :D

标签: tlv


【解决方案1】:

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

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

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

There's a page on wikipedia covering it in just a little more detail。不过不要混淆,每个三元组都是“顶级”描述,TLV 中通常没有项目嵌套(尽管您可以通过在另一个标签的 V 中编码 TLV 三元组来想出一种方法)。

【讨论】:

  • 谢谢埃德温。我正在寻找它的确切需求和优点/缺点。如果您知道任何示例,请告诉我。
  • 优点是它是一种非常简单的格式(易于解析,您可以跳过旧程序中新添加的字段)。缺点是它是一种非常简单的格式(没有内置的层次结构支持,二进制编码很差,数据类型必须事先让双方都知道或以某种自定义编码方式传输,对数据随时间变化的支持非常差不是添加剂,而是替代品等)。其中一些缺点是可以修复的,例如您可以对二进制文件进行 uuencode 来传输它,但这只是在另一端进行 de-uuencode 的更多工作。
  • 其实你可以把更多的TLV放在其他的TLV里面:TLV结构中type字段第1字节的第6位,如果设置为1,表示constructed,表示TLV结构的v部分其实是其他TLV的集合。
  • Fabio,是的,您可以在 TLV 中嵌入 TLV,正如我原来的帖子所述;但是,除非您使用比 TLV 更具体的东西,例如 X.690 BER 编码或其他东西,否则没有需要设置哪个字节的标准。使用上述编码,标记构造值的是标签的类子字段的第 6 个字节,而不是类型字段的第一个字节。所以显然没有一个可接受的构造标签标志,没有在许多不同的“更具体”的 TLV 之类的协议中进行选择。
  • 使用 TLV 代替 HTML 浏览器会不会运行得更快?
【解决方案2】:

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

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

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

【讨论】:

  • 想知道为什么现在的通信和网页渲染没有太多使用?
【解决方案3】:

我们仍然使用 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。数据包可以包含很多这样的数据。

receiver得到后,解析包非常容易,receiver可以顺利解析所有数据。

数据解析:

数据:DF 82 0A 03 30 31 32 DF 82 0B 04 01 12 22 33

DF 82 0ADF 82 0B 是预定义的(值类型 BCD、HEX、ASCII)标签。当数据到达时,在一个循环中,首先解析器将查找标记(即DF 82 0A)和一个字节(数据长度)。它还将读取最多 length 的数据字节。

【讨论】:

  • 如何解析这些数据?
  • 我已经添加了解析方法。
【解决方案4】:

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 的最大缺点是人类无法直接阅读。但是请注意,如果将数据转换为十六进制,则阅读难度会适中。

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      TLV:标签-长度-值

      示例:045002124354

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

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          猜你喜欢
          • 2021-12-26
          • 2015-11-13
          • 2022-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-20
          • 1970-01-01
          相关资源
          最近更新 更多