LoginSignup
27
27

More than 5 years have passed since last update.

十六進数の文字列から実際の数値を取得する

Last updated at Posted at 2015-12-24

ググるとほとんどの記事はこの書き方しか教えてないんですよな…

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 よりも便利だったり。

というわけでもう十六進数の文字列から実際の数値を取得しようとするとき積極的に Intinit 使いましょうぜ

27
27
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
27
27