0

我正在 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 not convertible to UInt8'。

我对 Swift 很陌生。这里的问题是,我如何让函数返回一个 UInt8 值,我如何让它形成一个 UInt8 值?

任何帮助将不胜感激!

4

2 回答 2

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(format: "%0x" , colorToHex(25)) // "19" 在你的情况下你有空格,如果数字有一个符号

于 2015-08-04T11:32:13.767 回答
1

没有必要使用NSStringor Int。如果redSliderUISlider的最小值为 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.
于 2015-08-04T11:48:52.840 回答