web-dev-qa-db-fra.com

Convertir une chaîne hexadécimale en hexadécimal int

Je dois convertir une chaîne hexadécimale en un entier hexadécimal, comme ceci:

color = "0xFF00FF" #can be any color else, defined by functions
colorto = 0xFF00FF #copy of color, but from string to integer without changes

Je peux aussi avoir le format RVB.

Je suis obligé de le faire car cette fonction va après:

def i2s int, len
  i = 1
  out = "".force_encoding('binary')
  max = 127**(len-1)

  while i <= len
    num = int/max
    int -= num*max
    out << (num + 1)
    max /= 127
    i += 1
  end

  out
end

J'ai vu ici que des entiers hexadécimaux existent. Quelqu'un peut-il m'aider avec ce problème?

13
FrereDePute

Vous auriez besoin de fournir un argument de base entier à String#to_i méthode:

irb> color = "0xFF00FF"
irb> color.to_i(16)
=> 16711935
irb> color.to_i(16).to_s(16)
=> "ff00ff"
irb> '%#X' % color.to_i(16)
=> "0XFF00FF"
27
David Unric

Tout d'abord, un entier n'est jamais hexadécimal. Chaque entier a un hexadécimal représentation, mais c'est une chaîne.

Pour convertir une chaîne contenant une représentation hexadécimale d'un entier avec le 0x préfixe d'un entier dans Ruby, appelez la fonction Integer dessus.

Integer("0x0000FF") # => 255
10
Cu3PO42

2.1.0 :402 > "d83d".hex => 55357

6
wxianfeng