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

Convert NSString to UInt8 in a function in Swift?

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

正如我在 SO 上对之前 post 的回复所确定的那样,我必须根据数组中的十六进制整数发送命令。我正在使用以下代码来执行此操作:

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
}

问题是我必须 return 返回一个 UInt8 值。由于 'st' 是一个 NSString,因此 Xcode 会抛出 'NSString not convertible to UInt8'.

的错误

我是 Swift 的新手。这里的问题是,如何将函数获取到 return 一个 UInt8 值 我如何获取它以形成一个 UInt8 值?

如有任何帮助,我们将不胜感激!

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" 在你的例子中你有space,如果数字有一个符号

不需要使用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.