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

时间:2015-08-01 08:54:32

标签: ios swift bluetooth nsdata core-bluetooth

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

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

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形式发送的数据。

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

1 个答案:

答案 0 :(得分:5)

如果您不坚持使用十六进制字符串,那么最简单的解决方案 将使用十六进制整数值从数组创建数据:

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

Swift 3:

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