Преобразование целого числа в шестнадцатеричную строку в Ruby


206

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

Что-то вроде противоположности String#to_i:

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

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

"0A".hex #=>10

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

Ответы:


325

Вы можете дать to_sбазу, отличную от 10:

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

Обратите внимание, что в ruby ​​2.4 FixNumи BigNumбыли унифицированы в Integerклассе. Если вы используете более старый ruby, проверьте документацию FixNum #to_s и BigNum #to_s


4
Это ответ, который я искал, но он не задокументирован на связанной странице. Str.to_s => str указан как не принимающий параметры и имеет «Возвращает получателя». как единственная документация, но, похоже, работает
Мэтт Хотон

2
Сожалеем о том , что копия пасты ошибку конечно to_s на строки не принимает аргументов , но на Fixnum это делает :)
Жан

3
Ах, я искал в Integer метод .to_s и не смог его найти. В следующий раз я тоже загляну под Fixnum
Мэтт Хотон

1
Убедитесь, что исходный номер является экземпляром Fixnum, Float выдаст исключение.
Ли

88

Как насчет использования %/ sprintf:

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

15
Спасибо за показ этого, мне нужно что-то, что получило бы строку фиксированной длины с добавлением '0'. Например: "% 02X"% 10 # => "0A"
Аарон Хинни

42
А для других рубиновых новичков: "#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"- Мне понадобилось немного времени, чтобы понять, как отправить несколько аргументов.
Ноябрь

1
Это потрясающий фрагмент Ruby!
OzBandit

4
@TomD% - это метод String, который эффективно обеспечивает сокращение для форматирования sprintf (они выполняют одни и те же внутренние вызовы). Это документировано в классе Струнный см ruby-doc.org/core-1.9.3/String.html#method-i-25
tardate

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

спас мой день хорошее преобразование RGB
Тим Кречмер


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.