Konwersja liczby całkowitej na ciąg szesnastkowy w Rubim


206

Czy istnieje wbudowany sposób na konwersję liczby całkowitej w Rubim na jej szesnastkowy odpowiednik?

Coś w rodzaju przeciwieństwa String#to_i:

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

Może jak:

"0A".hex #=>10

Wiem, jak tworzyć własne, ale prawdopodobnie bardziej efektywne jest użycie wbudowanej funkcji Ruby.

Odpowiedzi:


325

Możesz podać to_sbazę inną niż 10:

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

Zauważ, że w Ruby 2.4 FixNumi BigNumzostały zunifikowane w Integerklasie. Jeśli używasz starszego rubinu, sprawdź dokumentację FixNum #to_s i BigNum #to_s


4
Oto odpowiedź, której szukałem, ale nie jest ona udokumentowana na połączonej stronie str.to_s => str jest określony jako nieakceptujący parametrów i ma „Zwraca odbiornik”. jako jedyna dokumentacja, ale wydaje się, że działa
Matt Haughton,

2
przepraszam za ten błąd wklejania kopii oczywiście to_s na łańcuchu nie przyjmuje argumentów, ale na Fixnum robi :)
Jean

3
Ach, szukałem pod Integer dla metody .to_s i nie mogłem jej znaleźć. Następnym razem zajrzę pod Fixnum
Matt Haughton,

1
Upewnij się, że oryginalny numer jest instancją Fixnum, Float zgłosi wyjątek.
Lee

88

Co powiesz na użycie %/ sprintf:

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

15
Dzięki za pokazanie tego, potrzebowałem czegoś, co dałoby mi ciąg o stałej długości poprzedzony '0'. np .: „% 02X”% 10 # => „0A”
Aaron Hinni

42
A dla innych początkujących rubinów: "#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"- zajęło mi trochę wymyślenie, jak wysłać kilka argumentów.
ANeves

1
To niezwykle niesamowity fragment Ruby!
OzBandit

4
@TomD% to metoda String, która skutecznie zapewnia skrót do formatowania sprintf (wykonują te same wywołania wewnętrzne). Jest to udokumentowane w klasie String, patrz ruby-doc.org/core-1.9.3/String.html#method-i-25
opóźnienie

2
Mniej powielania:[255, 0, 10].map{|x| '%02x'%x}.join
Rok Kralj

78

Podsumowując:

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"

Dziękujemy za liczbę formatów cyfrowych. Zapomniałem o tym :)
onetwopunch

uratował mi dzień. niezła konwersja RGB
Tim Kretschmer


4

Na wypadek, gdybyś preferował sposób formatowania liczb ujemnych:

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.