Conversione di un numero intero in una stringa esadecimale in Ruby


206

Esiste un modo integrato per convertire un numero intero in Ruby nel suo equivalente esadecimale?

Qualcosa di simile al contrario di String#to_i:

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

Come forse:

"0A".hex #=>10

So come fare il mio, ma probabilmente è più efficiente usare una funzione Ruby integrata.

Risposte:


325

Puoi dare to_suna base diversa da 10:

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

Si noti che in ruby ​​2.4 FixNume BigNumsono stati unificati nella Integerclasse. Se stai usando un rubino più vecchio controlla la documentazione di FixNum #to_s e BigNum #to_s


4
Questa è la risposta che stavo cercando ma non è documentata nella pagina collegata str.to_s => str è specificato come non accettare parametri e ha "Restituisce il destinatario". come unica documentazione, ma sembra funzionare
Matt Haughton,

2
scusate per l'errore di copia incolla ovviamente to_s su stringa non accetta argomenti ma su Fixnum lo fa :)
Jean

3
Ah, stavo cercando Integer per un metodo .to_s e non sono riuscito a trovarne uno. Guarderò anche sotto Fixnum la prossima volta
Matt Haughton

1
Assicurati che il numero originale sia un'istanza di Fixnum, Float genererà un'eccezione.
sottovento

88

Che ne dici di usare %/ sprintf:

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

15
Grazie per averlo mostrato, avevo bisogno di qualcosa che mi avrebbe fatto precedere una stringa di lunghezza fissa con '0'. es: "% 02X"% 10 # => "0A"
Aaron Hinni

42
E per gli altri neofiti rubini là fuori: "#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"- Mi ci è voluto un po 'per capire come inviare diversi argomenti.
ANeves

1
Questo è un frammento di Ruby estremamente fantastico!
OzBandit,

4
@TomD% è un metodo String che fornisce effettivamente una scorciatoia per la formattazione sprintf (effettuano le stesse chiamate interne). È documentato nella classe String, vedi ruby-doc.org/core-1.9.3/String.html#method-i-25
tardate

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

78

Riassumere:

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"

Grazie per il numero di formattazione delle cifre. Dimenticato :)
onetwopunch

mi ha salvato la giornata. bella conversione RGB
Tim Kretschmer,


4

Nel caso abbiate una preferenza per la formattazione dei numeri negativi:

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.