【问题标题】:Preparing data in TLV8在 TLV8 中准备数据
【发布时间】:2017-10-19 05:39:12
【问题描述】:

我正在编写 TLV8 格式的 HomeKit(可能是蓝牙)特性。苹果文档说

该值是一个包含一组一个或多个 TLV8 的 NSData 对象, 它们是 8 位类型的打包类型长度值项,8 位 长度和 N 字节值。

根据维基百科,类型长度值是

类型

二进制代码,通常只是字母数字,表示这部分消息所代表的字段类型;

长度

值字段的大小(通常以字节为单位);

价值

可变大小的字节序列,其中包含这部分消息的数据。

我不知道如何打包。我想我可以将原始字节写入 NSData,但是我应该为 pad 写什么,如果我需要任何填充等。那么有没有一个例子来说明如何做到这一点?

【问题讨论】:

    标签: ios bluetooth homekit tlv


    【解决方案1】:

    哦,我想通了。 TLV8 由三个部分组成:“标签”、“长度”和“值”。我不知道 8 是什么意思。

    标签和长度都是 UInt8。我相信标签可能取决于 TLV8 的使用位置。长度是值的长度。价值就是它本身的内容。

    所以当我想发送一个简单的 1 作为值时,我使用:

    let tag = 0x02 // For example
    let length = 0x01
    let value = 0x01
    let data = Data(bytes: [tag, length, value]) // NSData
    

    【讨论】:

    • Swift 似乎无法再从上面的代码中推断出类型。不过这似乎可行:code let tag: UInt8 = 0x02 let length: UInt8 = 0x01 let value: UInt8 = 0x01 let bytes:[UInt8] = [tag, length, value]
    • TLV8中的8表示类型和长度为8位
    猜你喜欢
    • 2016-02-06
    • 2016-02-23
    • 1970-01-01
    • 2014-01-17
    • 2019-01-02
    • 1970-01-01
    • 2016-05-27
    • 2018-03-29
    • 2013-08-23
    相关资源
    最近更新 更多