什么是 TLV?
在代码中放置钩子(函数)而不是 if/else?
如果我有一段代码在不同的平台上运行,在代码中的不同位置,我可以放置 TLV 函数挂钩来识别我在哪个平台上并相应地执行?或类似的东西?
好处可以更简洁的代码?易于维护?添加新平台时,只需要更改 TLV 代码而不需要更改源代码吗?
我在这里可能完全错了。
什么是 TLV?
在代码中放置钩子(函数)而不是 if/else?
如果我有一段代码在不同的平台上运行,在代码中的不同位置,我可以放置 TLV 函数挂钩来识别我在哪个平台上并相应地执行?或类似的东西?
好处可以更简洁的代码?易于维护?添加新平台时,只需要更改 TLV 代码而不需要更改源代码吗?
我在这里可能完全错了。
TLV 是标签长度值编码。通常,最好用它的原始名称 type-length-value 来引用它。
第一个字段是正在处理的数据的“类型”,第二个字段指定值的“长度”,第三个字段包含表示“类型”值的“长度”数据量。
通过将更多的三元组附加到先前存在的消息中,可以在同一消息中传输多条数据。
维基百科上有一个页面更详细地介绍了它。不过不要混淆,每个三元组都是“顶级”描述,TLV 中通常没有项目嵌套(尽管您可以通过在另一个标签的 V 中编码 TLV 三元组来想出一种方法)。
TLV 是一种存储数据的方式,以便于快速解析该数据。
通常,您读取类型(标签)、长度和值,然后将这些数据发送到处理器函数。此处理器功能唯一的功能将是处理类型 X。然后,您读取下一个类型,它的长度和值并将其发送到适当的处理器。
它通常用作处理数据的简单方法,无需大量额外开销。
我们仍然使用 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
)和一个字节(数据长度)。它还将读取最大长度的数据字节。
TLV 指的是 Type-Length-Value 三重奏中的编码值,这种更通用的形式记录在 WikiPedia 上。
在某些情况下(例如 EMV),TLV 指的是更具体的 X.690,它也记录在 WikiPedia 上。
TLV 具有以下优点:
TLV 最大的缺点是它不是直接人类可读的。但是请注意,如果将数据转换为十六进制,则读取难度适中。
我认为您所指的称为Type Length Value,并且有一个维基百科页面。希望有帮助。
TLV:标签-长度-值
示例:045002124354
如果我们以配置为例:045是
电视剧中奖号码的意思,那么:中奖号码的值为:12
TLV 对于创建通信协议很有用。您使用标签、长度、值来存储信息。你可以在 github 上看到非常漂亮的实现(我认为是最好的)。