2008-09-17 3 views
181

Есть ли встроенный способ преобразования целого числа в Ruby в его шестнадцатеричный эквивалент?Преобразование целого числа в шестнадцатеричную строку в Ruby

Что-то как противоположность String#to_i:

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

Как возможно:

"0A".hex #=>10 

Я знаю, как катить мой собственный, но это, вероятно, более эффективно использовать встроенную функцию Ruby.

ответ

280

Вы можете дать to_s другое основание, чем 10:

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

Как об использовании %/sprintf:

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

Спасибо за показ этого, мне нужно что-то, что бы получить мне фиксированную длину строка добавлена ​​с '0'. ex: «% 02X»% 10 # => «0A» – 2008-10-31 13:07:30

+37

И для других рубиновых новичков: `` #% 02x% 02x% 02x "% [255, 0, 10] # =>" # ff000a "` - Я немного сообразил, как отправить несколько аргументов. – ANeves 2011-03-22 19:08:30

+1

Это потрясающий фрагмент Ruby! – OzBandit 2012-11-09 23:40:40

64

Резюмируя:

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" 
2

Только в случае, если у вас есть предпочтение, как отрицательные числа форматируются:

p "%x" % -1 #=> "..f" 
p -1.to_s(16) #=> "-1" 
Смежные вопросы