2017-05-19 4 views
6

J'écris une caractéristique HomeKit (donc peut-être Bluetooth) au format TLV8. doc Apple ditPréparation des données dans TLV8

La valeur est un objet NSData contenant un ensemble d'une ou plusieurs années TLV8, qui sont emballés des éléments-longueur-valeur du type avec un type 8 bits, longueur de 8 bits , et N- valeur d'octet.

Selon Wikipeida une valeur de longueur de type est

Type de

Un code binaire, souvent simplement alphanumérique, qui indique le type de champ que cette partie du message représente;

Longueur

La taille du champ de valeur (typiquement en octets);

Valeur

série d'octets de taille variable qui contient des données pour cette partie du message.

Je n'ai aucune idée de comment emballer un. Je suppose que je peux écrire des octets bruts à NSData, mais qu'est-ce que j'écris pour le pad, si j'ai besoin de n'importe quel padding, etc. Donc est-il un exemple de la façon de faire cela?

Répondre

2

Oh, je l'ai compris. TLV8 se compose de trois sections: "Tag", "Length" et "Value". Je ne sais pas ce que 8 veut dire.

L'étiquette et la longueur sont UInt8. Je crois que ce que l'étiquette peut dépendre de l'endroit où le TLV8 est utilisé. La longueur est la longueur de la valeur. La valeur est le contenu lui-même.

Alors, quand je veux envoyer un simple 1 comme valeur, j'utilise:

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

Swift semble ne pas être en mesure de déduire le type plus du code ci-dessus. Cela semble fonctionner si: code 'laisser tag: UInt8 = 0x02 laisser longueur: UInt8 = 0x01 valeur let: UInt8 = 0x01 laisser octets: [UInt8] = [étiquette, la longueur, la valeur]' – addzo

+2

Le 8 dans TLV8 indique que le type et la longueur sont 8 bits –