2017-05-19 14 views
6

Tôi đang viết một đặc tính HomeKit (có thể là Bluetooth) ở định dạng TLV8. Táo doc nóiChuẩn bị dữ liệu trong TLV8

Giá trị là một đối tượng NSData chứa một tập hợp của một hoặc nhiều của TLV8, được đóng gói các mặt hàng loại dài có giá trị với một loại 8-bit, 8-bit chiều dài, và N giá trị byte.

Theo Wikipeida một giá trị kiểu chiều dài là

Loại

Một mã nhị phân, thường chỉ đơn giản là chữ và số, mà chỉ ra các loại lĩnh vực mà khu vực này của thông điệp thể hiện;

Chiều dài

Kích thước của trường giá trị (thường tính bằng byte);

Value

Biến cỡ loạt các byte chứa dữ liệu cho phần này của thư.

Tôi không biết cách đóng gói. Tôi cho rằng tôi có thể viết các byte thô thành NSData, nhưng tôi phải viết gì cho pad, nếu tôi cần bất kỳ phần đệm nào, v.v. Vậy có ví dụ về cách thực hiện điều đó không?

Trả lời

2

Ồ tôi đã tìm ra. TLV8 bao gồm ba phần: "Thẻ", "Độ dài" và "Giá trị". Tôi không biết ý nghĩa của 8.

Cả thẻ và độ dài đều là UInt8. Tôi tin rằng những gì các thẻ có thể phụ thuộc vào nơi TLV8 được sử dụng. Độ dài là độ dài của giá trị. Giá trị là nội dung nó tự.

Vì vậy, khi tôi muốn gửi một đơn giản 1 là một giá trị, tôi sử dụng:

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

Swift dường như không thể suy ra các loại nữa từ các mã trên. Điều này dường như làm việc mặc dù: 'đang để cho tag: uint8 = 0x02 phép chiều dài: uint8 value = 0x01 let: uint8 = 0x01 hãy byte: [uint8] = [tag, chiều dài, giá trị] ' – addzo

+2

8 trong TLV8 chỉ ra rằng loại và chiều dài là 8-bit –

Các vấn đề liên quan