Rubyで整数を16進数文字列に変換する


206

Rubyの整数を同等の16進数に変換する組み込みの方法はありますか?

の反対のようなものString#to_i

"0A".to_i(16) #=>10

おそらく:

"0A".hex #=>10

私は自分でロールする方法を知っていますが、組み込みのRuby関数を使用する方がおそらくより効率的です。

回答:


325

あなたはto_s10以外のベースを与えることができます:

10.to_s(16)  #=> "a"

ルビー2.4にすることを注意FixNumしてBigNumで統一されたIntegerクラス。古いルビーを使用している場合は、FixNum#to_sBigNum#のドキュメントを確認してください。to_s


4
それが私が探していた答えですが、リンクされたページにドキュメント化されていません。唯一のドキュメンテーションとして、しかしそれは機能するようです
マット・ホートン

2
もちろん、文字列のコピーと貼り付けの間違いto_sは引数を取りませんが、Fixnumではそれを行います:)
Jean

3
ああ、私はIntegerで.to_sメソッドを探していましたが、見つかりませんでした。私もFixnumか次回の下で見てみましょう
マット・ホートン

1
元の数値がFixnumのインスタンスであることを確認してください。Floatは例外をスローします。
lee 2015年

88

%/の使い方はどうですかsprintf

i = 20
"%x" % i  #=> "14"

15
これを示してくれてありがとう、私は '0'が前に付けられた固定長の文字列を取得できる何かが必要でした。例: "%02X"%10#=> "0A"
アーロンヒンニ

42
そして、そこにいる他のルビー初心者のために:"#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"-いくつかの引数を送信する方法を理解するのに少し時間がかかりました。
ANeves、2011年

1
これはRubyの非常に素晴らしいスニペットです!
OzBandit

4
@TomD%は、sprintfフォーマットの省略形を効果的に提供するStringメソッドです(同じ内部呼び出しを行います)。Stringクラスに記載されています。ruby
doc.org/

2
重複を[255, 0, 10].map{|x| '%02x'%x}.join
減らす

78

要約する:

p 10.to_s(16) #=> "a"
p "%x" % 10 #=> "a"
p "%02X" % 10 #=> "0A"
p sprintf("%02X", 10) #=> "0A"
p "#%02X%02X%02X" % [255, 0, 10] #=> "#FF000A"

数字のフォーマットの数をありがとう。それについて忘れてしまった:)
onetwopunch 2015

私の日を救った。素敵なRGB変換
Tim Kretschmer


4

念のため、負の数値のフォーマット方法を設定しておきます。

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.