2016-06-14 17 views
2

16進数を10進数に迅速に変換する方法は?スウィフトで16進数を10進数に変換する

私は、文字列 "423fdf4dfb1115" を持っていると私は、私はこのてみてください。この=> 18647576781459733.

を取得する必要があります。

let result = UInt8(strtoul("423fdf4dfb1115", nil, 16)) 

が、アプリのクラッシュを...

私はこのオンライン変換を使用します。

http://www.binaryhexconverter.com/hex-to-decimal-converter
+0

あなたはなぜあなたはUINT8に結果をキャストしている文字列 –

+2

をループする必要がありますか?そこには非常に大きな数字がありますが、小さなUInt8に収まらない可能性があります。 – Gruntcakes

+0

提供した16進数(423fdf4dfb1115)は18,596,864,257,291,000です。 私はこれをexcel(cell x 16^0)で証明し、各桁ごとに1を増分し、それぞれの結果を合計します。 – Stevan

答えて

1

LET結果= UInt64型(strtoulを( "423fdf4dfb1115"、ゼロ、16))

8

結果はUInt64UInt8.maxは255)である必要があります。

便利なイニシャライザがあります。strtoulは不要です。

let string = "423fdf4dfb1115" 
let result = UInt64(string, radix:16) 
+0

ありがとう!これは動作します! – Vykintas

+0

クールなトリック。私はその初期設定について知らなかった。有効な基数はどれくらいかかりますか? (基数37、奇妙な理由があったとしても?)そして、整数クラスの値を与えられた基数の文字列として出力する対応するメソッドがありますか? –

+0

@DuncanCそうだと思います。はい、 'String'には' print(String(999_999、radix:16))// "f423f" 'のような初期化子があります。 'F423F'を得るためのオプションの' uppercase'パラメータさえあります。 – vadian

0

あなたがInt()を使用すると、それは以下のように六角radix: 16だと言う必要がありますので、より良いのIntを取得する必要があります。スウィフト

は3

let result = "423fdf4dfb1115" 
let intResult = Int(result , radix: 16) 
print(intResult) 
関連する問題