在Swift函数中将NSString转换为UInt8?

时间:2015-08-04 11:21:55

标签: ios swift bluetooth nsdata uint8t

我在Xcode中创建了一个Swift应用程序,它向BLE适配器发送一个命令,以便使连接到它的LED变为不同的颜色。

正如我在对SO的前一篇文章的回复中建立的那样,我必须以数组中的十六进制整数发送命令。我使用以下代码来执行此操作:

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

因此,这需要如上所述的UInt8表单。

但是,我试图在我的Swift应用程序上使用滑块作为颜色选择器,以便设置连接到BLE接收器的LED灯条的R,G和B颜色。为了做到这一点,我分别为R,G和B创建了三个滑块,将每个滑块的最小值设置为0,最大值设置为255(因为255转换为十六进制的FF)。我然后使用以下函数将这些转换为十六进制形式,以便我在上面的命令中实现。

func colorToHex(input: Int) -> UInt8 {
    var st = NSString(format: "%2X", input)
    return st
}

这个问题是我必须再次返回一个UInt8值。因为' st'是一个NSString,Xcode抛出的错误是NSString不能转换为UInt8'。

我对Swift相当新鲜。这里的问题是,如何让函数返回UInt8值,如何使其形成UInt8值?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

只是

func colorToHex(input: Int) -> UInt8 {
    return UInt8(input % (Int(UInt8.max) + 1))
}



NSString(format: "%2X", colorToHex(25))  // "19"

NSString(format: "%2X", colorToHex(254)) // "FE"

NSString(format: "%2X", colorToHex(255)) // "FF"

NSString(format: "%2X", colorToHex(256)) //  "0"

如果我是你,我将使用NSString(格式:“%0x”,colorToHex(25))//“19” 在您的情况下,如果数字有一个符号,则您有空格

答案 1 :(得分:1)

无需使用NSStringInt。如果redSlider是您的UISlider,其最小值为0,最大值为255,那么您只需计算

let redByte = UInt8(redSlider.value)

并在bytes数组中使用它:

var bytes : [UInt8] = [ 0x52, 0x13, 0x00, 0x56, 0xFF, 0x00, 0x00, 0x00, 0xAA ]
bytes[0] = redByte // Assuming that the first array element is for red.