将十六进制颜色转换为字符串到Uint

时间:2017-01-25 04:13:25

标签: swift hex uicolor uint

我一直在寻找这个年龄,并且找不到有效或我理解的解决方案。

我在数据库中有一个字符串" 0x6c8c93"我想将其转换为Uint,以便将其转换为颜色。

以下是我之前用于将Uint转换为颜色的功能。而且我只是将颜色图表中的十六进制值以0x6c8c93格式传递给它。但是现在我需要从数据库中提取一些值,所以我必须使用字符串。

class func UIColorFromHEX(hexValue: UInt) -> UIColor {
    return UIColor(
        red: CGFloat((hexValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((hexValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(hexValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

这是一种方法。使用String(string.characters.suffix(6))保留字符串的最后6个字符,然后使用UInt初始值设定项UInt(_:radix:)将hexString转换为UInt

let string = "0x6c8c93"

if let hexValue = UInt(String(string.characters.suffix(6)), radix: 16) {
    // create the color from hexValue
}

答案 1 :(得分:0)

信用SqlLOCALDb_edited.png,请尝试以下操作:

public func UIColorFromRGB(_ rgbValue: String) -> UIColor {
    return UIColor(
        red: CGFloat((rgbValue.hexaToInt & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue.hexaToInt & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue.hexaToInt & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

extension String {
    var hexaToInt      : Int    { return Int(strtoul(self, nil, 16))      }
    var hexaToDouble   : Double { return Double(strtoul(self, nil, 16))   }
    var hexaToBinary   : String { return String(hexaToInt, radix: 2)      }
    var decimalToHexa  : String { return String(Int(self) ?? 0, radix: 16)}
    var decimalToBinary: String { return String(Int(self) ?? 0, radix: 2) }
    var binaryToInt    : Int    { return Int(strtoul(self, nil, 2))       }
    var binaryToDouble : Double { return Double(strtoul(self, nil, 2))   }
    var binaryToHexa   : String { return String(binaryToInt, radix: 16)  }
}

extension Int {
    var binaryString: String { return String(self, radix: 2)  }
    var hexaString  : String { return String(self, radix: 16) }
    var doubleValue : Double { return Double(self) }
}

//"ff".hexaToInt              // "255"
//"ff".hexaToDouble           // "255.0"
//"ff".hexaToBinary           // "11111111"
//"255".intToHexa             // "ff"
//"255".intToBinary           // "11111111"
//"11111111".binaryToInt      // "255"
//"11111111".binaryToDouble   // "255.0"
//"11111111".binaryToHexa     // "ff"
//255.binaryString            // "11111111"
//255.hexaString              // "ff"
//255.doubleValue             // 255.0

它对我有用。

答案 2 :(得分:0)

更新到 SwiftUI 和 Swift5

let string = "0x6c8c93"

let hexValue = UInt32(String(string.suffix(6)), radix: 16)
//This will return the UInt32 ready to be converted to a color

这是基于@vacawama 的回答