2016-10-10 37 views
16

我试图将字符串转换为数据类型。我认为这是我所需要的,但如果我尝试打印它只是打印出“12个字节”将字符串转换为swift中的数据3.0

let tString = "Hello World!" 
if let newData = tString.data(using: String.Encoding.utf8){ 
    print(newData) 
    self.peripheral?.writeValue(newData, for: positionCharacteristic, type: CBCharacteristicWriteType.withResponse) 
} 

我在做什么错?

+0

没有什么错。顺便说一句,'.utf8'就足够了。 – vadian

+0

参见http://stackoverflow.com/questions/39075043/how-to-convert-data-to-hex-string-in-swift,或者只是'print(newData as NSData)'。 –

+0

打印12字节的原因是需要12个字节来存储UTF8中的12个字符(ASCII字符每个字符1个字节)。 –

回答

9

你没有做错什么。这就是Data目前的调试打印输出。它随着时间而改变。它有时印刷更像NSData。根据调试打印格式的不同,我认为最好是直接拥有它。我发现以下非常有用:

extension Data { 
    func hex(separator:String = "") -> String { 
     return (self.map { String(format: "%02X", $0) }).joined(separator: separator) 
    } 
} 

这让我的东西替换你简单print(newData)

print(newData.hex()) 

print(newData.hex(separator:".")) 

,如果我的眼睛需要帮助解析字节

撇开,我做了很多BLE的东东m本身,并且已经为BLE填充了许多其他有用的数据扩展

+0

所以它听起来像'self.peripheral?.writeValue(newData,for:positionCharacteristic,type:CBCharacteristicWriteType.withResponse)'应该可以工作。我不知道为什么我在终端上看不到任何东西。我有其他方面的数据。 – lusher00

+1

函数的主体可以替换为'return self.map {String(format:“%02x”,$ 0)} .joined(separator:separator)' – vadian

+0

不知道我理解失败@ lusher00。听起来像你的问题不仅仅是“为什么它不显示字节而不是字节数?”你还有什么期望看到哪里?你指的是哪个终端? –