Convertir un entero a una cadena hexadecimal en Ruby


206

¿Existe una forma integrada de convertir un entero en Ruby en su equivalente hexadecimal?

Algo como lo contrario de String#to_i:

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

Como tal vez:

"0A".hex #=>10

Sé cómo rodar el mío, pero probablemente sea más eficiente usar una función incorporada de Ruby.

Respuestas:


325

Puedes dar to_suna base que no sea 10:

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

Tenga en cuenta que en ruby ​​2.4 FixNumy BigNumse unificaron en la Integerclase. Si está utilizando un rubí anterior, consulte la documentación de FixNum #to_s y BigNum #to_s


44
Esa es la respuesta que estaba buscando, pero no está documentada en la página vinculada str.to_s => str se especifica como no acepta parámetros y tiene "Devuelve el receptor". como la única documentación, pero parece funcionar
Matt Haughton

2
perdón por el error de copiar y pegar, por supuesto, to_s en la cadena no toma argumentos, pero en Fixnum sí :)
Jean

3
Ah, estaba buscando en Integer un método .to_s y no pude encontrar uno. Veré debajo de Fixnum la próxima vez también
Matt Haughton

1
Asegúrese de que el número original sea una instancia de Fixnum, Float lanzará una excepción.
Lee

88

¿Qué hay de usar %/ sprintf:

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

15
Gracias por mostrar esto, necesitaba algo que me consiguiera una cadena de longitud fija antepuesta con '0'. ej .: "% 02X"% 10 # => "0A"
Aaron Hinni el

42
Y para los otros novatos de rubí: "#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"- me llevó un poco descubrir cómo enviar varios argumentos.
ANeves

1
¡Este es un fragmento extremadamente increíble de Ruby!
OzBandit

44
@TomD% es un método de cadena que efectivamente proporciona una abreviatura para el formato sprintf (hacen las mismas llamadas internas). Está documentado en la clase String, consulte ruby-doc.org/core-1.9.3/String.html#method-i-25
tarda

2
Menos duplicación:[255, 0, 10].map{|x| '%02x'%x}.join
Rok Kralj

78

Para resumir:

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"

Gracias por el número de formato de dígitos. Olvidé eso :)
onetwopunch

Me salvó el día. buena conversión RGB
Tim Kretschmer


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.