2015-05-31 15 views
9

bir altıgen dize dönüştürme:Böyle bir onaltılık tamsayıya onaltılık dize dönüştürmek zorunda onaltılık int

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

Ben de RGB formatında olabilir. Ben here gördüm

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 

onaltılık tamsayı var olduğunu: sonra bu fonksiyon gider çünkü

Bunu yapmak zorundayım. Birisi bana bu problemde yardımcı olabilir mi?

+0

Neden 'color.to_i'' 0' olmaktan başka bir şey olmasını beklersiniz? Temelin varsayılan olarak '10' olduğunu gösteren api belgelerini (http://apidock.com/ruby/String/to_i) okudunuz, böylece 'x' olan bir sıfıra sahip dizginiz ondalık sıfır olarak görülecektir. 'To_i' yöntemini dizginizin bir hex dizesi olduğunu söylemelisiniz - ve API bunu gösteriyor. – Pavling

cevap

18

Sen String#to_i yöntemine tedarik tamsayı taban argümanı gerekir:

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

Çalışmıyorsa, – FrereDePute

+0

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

+0

Hata! Üzgünüz, iyi çalışıyor! Teşekkürler ! – FrereDePute

8

İlk kapalı, bir tamsayı asla onaltılık değildir. Her tam sayı bir gösterimi gösterime sahiptir, ancak bu bir dizedir.

0x önekiyle bir tamsayı onaltılık bir gösterimi içeren bir dizeyi Ruby'de bir tamsayıya dönüştürmek için, üzerinde Integer işlevini çağırın.

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

İhtiyacım olan bu değil, ama gerçekten bilmek güzel! – FrereDePute

+0

Veya alternatif olarak, 'Tamsayı ("0000FF", 16) ' – Hubro