la conversion de Chaîne de caractères des Données de swift 3.0
Je suis en train de convertir une chaîne en un type de données. Je pensais que c'était tout ce que je nécessaire, mais si j'essaie d'imprimer, il imprime juste "12 octets"
let tString = "Hello World!"
if let newData = tString.data(using: String.Encoding.utf8){
print(newData)
self.peripheral?.writeValue(newData, for: positionCharacteristic, type: CBCharacteristicWriteType.withResponse)
}
Ce que je fais mal?
- Il n'y a rien de mal. Par la voie,
.utf8
est suffisant. - Voir par exemple stackoverflow.com/questions/39075043/..., ou tout simplement
print(newData as NSData)
. - La raison, c'est l'impression de 12 octets est qu'il faut 12 octets pour stocker les 12 caractères en UTF8 (1 octet par caractère pour les caractères ASCII).
as NSData
est assez intelligent.- Je suppose que ton code devrait fonctionner...
Vous devez vous connecter pour publier un commentaire.
Tu ne fais rien de mal. C'est juste la façon dont les Données ne sont actuellement son debug de la version papier. Il a changé au fil du temps. Il a parfois l'imprimé plus comme NSData. Selon le débogage format d'impression est assez fragile, je pense que c'est mieux pour tout propriétaire de plus directement. J'ai trouvé ce qui suit assez utile:
Cela me permet de remplacer votre simple
print(newData)
avec quelque chose commeou
si mes yeux ont besoin de l'aide de l'analyse du octets
de côté, je fais un peu de BLE trucs moi-même, et avoir travaillé un certain nombre d'autres Données utiles extensions pour BLE des trucs
self.peripheral?.writeValue(newData, for: positionCharacteristic, type: CBCharacteristicWriteType.withResponse)
devrait fonctionner ensuite. Je ne sais pas pourquoi je ne vois pas de quoi que ce soit dans mon terminal. J'ai des données dans l'autre sens.return self.map{ String(format:"%02x", $0) }.joined(separator:separator)