2017-07-31 2 views
-1

Je travaille sur un projet bluetooth qui envoie la valeur sous la forme de données 8 bits à partir de deux caractéristiques, soit 8 bits de données d'un uuid caractéristique et un autre 8 bits de données d'un autre uuid caractéristique.Comment ajouter deux données 8 bits pour former une donnée 16 bits?

Je dois considérer que la première donnée de 8 bits est l'octet le plus significatif et que la deuxième donnée de 8 bits est l'octet le moins significatif.

Maintenant, je dois faire les combiner en une valeur de 16 bits et afficher le résultat.

Je suis novice dans la conversion de bits et d'octets dans swift.

S'il vous plaît aidez-moi.

Merci d'avance.

+1

double possible de (https [Convertir un UInt16 à Swift un tableau UInt8 deux octets]://stackoverflow.com/questions/25267089/convert-a-two-byte-uint8-array-to-a-uint16-in-swift) –

Répondre

2
let mostSignificantByte: UInt8 = 0x01 
let leastSignificantByte: UInt8 = 0x02 

let twoByteInteger = (UInt16(mostSignificantByte) << 8) | UInt16(leastSignificantByte) 

// twoByteInteger is 0x0102 
+0

Merci. Ici vous avez mentionné mostSignificantByte: UInt8 = 0x01 signifie 1 et leastSignificantByte: UInt8 = 0x02 signifie 2 et la valeur résultante est 0x0102 signifie 258. s'il vous plaît pouvez-vous me dire comment cela fonctionne. –

+0

Les valeurs 0x01 et 0x02 sont des espaces réservés; remplacez ceux avec toutes vos valeurs de huit bits. En ce qui concerne le code: UInt16 (x) convertit simplement l'entier de 8 bits en un entier de 16 bits. Donc, 0x01 devient 0x0001. << est l'opérateur bitshift gauche. Il "pousse" la valeur d'un certain nombre de bits vers la gauche. Dans ce cas, je l'ai décalé de 8 bits vers la gauche, donc 0x0001 devient 0x0100. Et, bien sûr, OR deux valeurs ensemble. Donc, 0x0100 | 0x0002 == 0x0102. Ainsi, j'ai combiné les deux entiers de 8 bits en un entier de 16 bits. –

+0

Désolé, je reçois la valeur sous la forme de format [UInt8]. Si j'essaie d'utiliser l'équation ci-dessus, je reçois une erreur. Sil te plait aide moi. –

1

Swift 3X et Xcode 8,0

let byte1: UInt8 = 0x01 
    let byte2: UInt8 = 0x02 
    let bit16 = UnsafePointer([byte1,byte2]).withMemoryRebound(to: UInt16.self, 
                capacity: 1) { 
                 $0.pointee 
    } 
    print(bit16) // 513 

Vous pouvez aller here plus en détail

+0

Si vous pensez qu'une question a déjà été posée et que vous y avez répondu, vous pouvez la * marquer * comme doublon. Il n'est pas nécessaire de répéter les réponses existantes. –

+0

@MartinR pouvez-vous s'il vous plaît marquer Dupliquer la question. Je ne peux pas avoir autorité pour marquer la question en double –

+0

J'ai obtenu la valeur d'une caractéristique comme ceci [1,0,0,0] ie [UInt8] mais dans le périphérique j'envoie 0x01 même pour le second 0x02 que j'ai reçu [2,0 , 0,0]. Maintenant, comment puis-je combiner ces valeurs pour former un seul 16 bits. –