it-swarm-pt.tech

Convertendo um inteiro em uma string hexadecimal em Ruby

Existe um caminho embutido para converter um inteiro em Ruby em seu equivalente hexadecimal?

Algo como o oposto de String#to_i :

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

Como talvez:

"0A".hex #=>10

Eu sei como fazer o meu próprio, mas é provavelmente mais eficiente usar uma função Ruby embutida.

198
Matt Haughton

Você pode dar to_s uma base diferente de 10:

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

Que tal usar % / sprintf :

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

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"
69
Lri

Aqui está outra abordagem:

sprintf("%02x", 10).upcase

veja a documentação para sprintf aqui: http://www.Ruby-doc.org/core/classes/Kernel.html#method-i-sprintf

12
Ultrasaurus

Apenas no caso de você ter uma preferência de como números negativos são formatados:

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
3
tool maker