2015-05-31 2 views
9

я должен преобразовать шестнадцатеричную строку в шестнадцатеричное целое число, например:Преобразование шестнадцатеричной строки в шестнадцатеричном междунар

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

я могу иметь формат RGB тоже.

Я обязан это сделать, потому что эта функция идет после:

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 

Я видел here, что существуют шестнадцатеричные числа. Может кто-нибудь помочь мне с этой проблемой?

+0

Почему вы ожидали 'color.to_i' быть ничем иным, кроме '0'? Вы прочитали api docs (http://apidock.com/ruby/String/to_i), которые показывают, что база по умолчанию равна «10», поэтому ваша строка с нулем, а затем «x» будет считаться десятичной нотой. Вам нужно сказать 'to_i', что ваша строка представляет собой шестую строку, и API показывает это. – Pavling

ответ

18

Вы должны были бы поставки целое базовый аргумент String#to_i метода:

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

Не работает, он возвращает строку тоже – FrereDePute

+0

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

+0

К сожалению, это хорошо работает! Спасибо вам ! – FrereDePute

8

Прежде всего, целое число никогда не является шестнадцатеричным. Каждое целое число имеет шестнадцатеричное представление , но это строка.

Чтобы преобразовать строку, содержащую шестнадцатеричное представление целого числа с префиксом 0x в целое число в Ruby, вызовите на нем функцию Integer.

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

Это не то, что мне нужно, но это действительно хорошо знать! – FrereDePute

+0

Или, наоборот, 'Integer (« 0000FF », 16)' – Hubro

Смежные вопросы