在 Swift 中使用 WriteValue 发送十六进制字符串

Sending Hex String using WriteValue in Swift

我一直在使用 XCode 和 Swift 创建一个应用程序来连接到蓝牙设备(连接了 LED 彩条)并且我写了一段代码会让它变色。

使用蓝牙嗅探器,我知道我需要发送 '52130056FF000000AA' 的值,这将使它在本例中变为红色。这是我已有的代码片段。 Characteristicx 在此代码之前定义。

let data: NSData = "52130056FF000000AA".dataUsingEncoding(NSUTF8StringEncoding)!
peripheral.writeValue(data, forCharacteristic: characteristicx, type: CBCharacteristicWriteType.WithoutResponse)

这段代码转换了我不想发送的十六进制字符串。 '<35323133 30303536 46463030 30303030 4141>'

所以,问题是,如何让 Swift 将 52130056FF000000AA 发送到 BLE 设备而不是转换后的字符串? 这里的问题是writeValue 命令需要 NSData(据我所知),我不确定如何使用普通的十六进制字符串作为以 NSData 形式发送的数据。

希望有人能帮助解决这个问题!任何帮助甚至建议都将不胜感激。

如果你不坚持使用十六进制 string 那么最简单的解决方案 将是从具有十六进制 整数值的数组创建数据:

let bytes : [UInt8] = [ 0x52, 0x13, 0x00, 0x56, 0xFF, 0x00, 0x00, 0x00, 0xAA ]
let data = NSData(bytes: bytes, length: bytes.count)

Swift3:

更简单
let bytes : [UInt8] = [ 0x52, 0x13, 0x00, 0x56, 0xFF, 0x00, 0x00, 0x00, 0xAA ]
let data = Data(bytes:bytes)