在swift 3.0中将字符串转换为数据

在swift 3.0中将字符串转换为数据,swift,Swift,我正在尝试将字符串转换为数据类型。我以为这就是我所需要的,但如果我试着打印它,它只打印“12字节” 我做错了什么?你没有做错什么。这就是数据当前进行调试打印输出的方式。随着时间的推移,情况发生了变化。它有时打印的数据更像NSData。取决于调试打印格式非常脆弱,我认为最好直接拥有它。我发现以下几点非常有用: extension Data { func hex(separator:String = "") -> String { return (self.map {

我正在尝试将字符串转换为数据类型。我以为这就是我所需要的,但如果我试着打印它,它只打印“12字节”


我做错了什么?

你没有做错什么。这就是数据当前进行调试打印输出的方式。随着时间的推移,情况发生了变化。它有时打印的数据更像NSData。取决于调试打印格式非常脆弱,我认为最好直接拥有它。我发现以下几点非常有用:

extension Data {
    func hex(separator:String = "") -> String {
        return (self.map { String(format: "%02X", $0) }).joined(separator: separator)
    }
}
这允许我将您的简单
打印(newData)
替换为

print(newData.hex())

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


除此之外,我自己也做了很多BLE的东西,并且为BLE的东西设计了许多其他有用的数据扩展

没有什么错。顺便说一句,
.utf8
就足够了。例如,请参阅或仅打印(新数据作为NSData)。它打印12个字节的原因是,在utf8中存储12个字符需要12个字节(ASCII字符每个字符1个字节)@MartinR
因为NSData
非常聪明。我认为您的代码应该可以正常工作……所以听起来像是
self.peripheral?.writeValue(newData,for:positionCharacteristic,type:CBCharacteristicWriteType.withResponse)
应该可以工作。我不知道为什么我的终端没有看到任何东西。我有相反的数据。函数体可以替换为
return self.map{String(格式:'%02x',$0)}。joined(分隔符:separator)
不确定我是否理解@lusher00的失败。听起来你的问题不仅仅是“为什么它不显示字节本身而不是字节计数?”你还希望看到什么?您指的是哪个终端?谢谢@vadian,更新。我想我内联它是因为我试图避免任何中间数组的半字节打印字符串。但我从未真正测试过它是否比这更聪明。我真的没有理由进行早期优化:)我认为看到字节数是我的失败,但现在似乎不再是这样了。我想这就是我在最初的问题中所问的所有问题,所以我将把这个标记为已回答,然后继续。非常感谢。
print(newData.hex())
print(newData.hex(separator:"."))