ググるとほとんどの記事はこの書き方しか教えてないんですよな…
let hexString = "FF"
var hex:UInt32 = 0x0
let scanner:NSScanner = NSScanner(string: hexString)
scanner.scanHexInt(&hex)
print(hex) //255
まあ Objective-C の時代ならこの書き方がベストだったのかもしれませんが、せっかく今の Swift はもっと便利な書き方あるのにな…
let hexString = "FF"
let hex = Int(hexString, radix: 16) ?? 0
print(hex) //255
var
使わずに済むし NSScanner
使わずに済むしコード量も半分で済むし(変換だけを考えれば半分どころか 1/3 になるんやで)何より余計な NS オブジェクト作らずに済みますから純正は Swift コードだけで出来ちゃうのがすごい気持ちいいんですよな。さらに radix:
の記述で御察しの通り、これは十六進数だけでなくいろんな進数に対応している(正確に言うと hexString で使える文字は [0-9a-zA-Z]
だけなので実質三十六進数までだが)しさらに実は hexString の先頭に "-"
を入れればマイナス値もちゃんと取得できるので NSScanner
よりも便利だったり。
というわけでもう十六進数の文字列から実際の数値を取得しようとするとき積極的に Int
の init
使いましょうぜ