2015-05-31 18 views
9

devo convertire una stringa esadecimale in un intero esadecimale, in questo modo:Convertire una stringa esadecimale a un int esadecimale

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

posso avere formato RGB troppo.

Sono obbligato a fare questo, perché questa funzione va dopo:

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 

ho visto here che esistono interi esadecimali. Qualcuno può aiutarmi con questo problema?

+0

Perché si aspetta 'color.to_i' di essere qualcosa di diverso da' 0'? Hai letto i documenti API (http://apidock.com/ruby/String/to_i) che mostrano che la base è impostata su "10", quindi la tua stringa con uno zero e "x" sarebbe considerata come zero decimale. Devi dire al metodo 'to_i' che la tua stringa è una stringa esadecimale e l'API lo mostra. – Pavling

risposta

18

Avresti bisogno di alimentazione argomento base intero a String#to_i metodo:

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" 
+0

Non funziona, restituisce anche una stringa – FrereDePute

+0

@FrereDePute Wut?! 'color.to_i (16) == 0xff00ff # true' –

+0

Oops spiacente funziona bene! Grazie ! – FrereDePute

8

Prima di tutto, un numero intero non è mai esadecimale. Ogni numero intero ha una rappresentazione esadecimale , ma quella è una stringa.

Per convertire una stringa contenente una rappresentazione esadecimale di un numero intero con il prefisso 0x in un numero intero in Ruby, chiamare la funzione Integer su di essa.

Integer("0x0000FF") # => 255 
+0

Non è quello che mi serve, ma è davvero bello saperlo! – FrereDePute

+0

Oppure in alternativa 'Intero (" 0000FF ", 16)' – Hubro

4

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

Problemi correlati