7
8

More than 5 years have passed since last update.

HTMLカラーコードの16進数10進数変換

Last updated at Posted at 2015-01-25

はじめに

HTMLカラーコードの16進数を10進数へ、10進数を16進数へ変換するコードをSwiftで書きます。
今回は、#8a2be2(BlueViolet)を変換していきます。

16進数から10進数

文字列を詳細に解析できるNSScannerクラスを使います。
このクラスは、内部で解析開始位置の情報を持っていて、それを動かしながら文字列を解析していきます。
特定の文字やキャラクタセットを取り出したり、数値解析に関するメソッドを持っています。

let code = "8a2be2"
let scanner = NSScanner(string: code as NSString)
var color:UInt32 = 0
if(scanner.scanHexInt(&color)) {
    let r = (color & 0xFF0000) >> 16
    let g = (color & 0x00FF00) >> 8
    let b = (color & 0x0000FF)
}

実行結果は(r, g, b) = (138, 43, 226)となります。

10進数から16進数

先ほどの実行結果の(r, g, b) = (138, 43, 226)8a2be2にするためにNSStringのformatを利用します。
%02xとすることで最小フィールド幅未満のとき0で埋めます。

NSString(format: "%02x%02x%02x", r, g, b)

実行結果は8a2be2となり、もとのHTMLカラーコードと一致します。

最後に

色を管理するUIColorクラスで利用する場合は、(r, g, b)をそれぞれ255.0で割ります。

UIColor(red: CGFloat(r)/255.0, green: CGFloat(g)/255.0, blue: CGFloat(b)/255.0, alpha: 1.0)

UIColorクラスは16進数からUIColorを作成できないため、UIColorクラスを拡張するカテゴリを作成すると便利かもしれません。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8