在 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)
我一直在使用 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)