将十六进制字符串转换为十六进制int

Fre*_*ute 12 ruby literals

我必须将十六进制字符串转换为十六进制整数,如下所示:

color = "0xFF00FF" #can be any color else, defined by functions
colorto = 0xFF00FF #copy of color, but from string to integer without changes
Run Code Online (Sandbox Code Playgroud)

我也可以使用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
Run Code Online (Sandbox Code Playgroud)

我在这里看到存在十六进制整数.有人可以帮我解决这个问题吗?

Dav*_*ric 26

您需要为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"
Run Code Online (Sandbox Code Playgroud)


Cu3*_*O42 10

首先,整数永远不是十六进制.每个整数都有一个十六进制表示,但这是一个字符串.

要将包含带0x前缀的十六进制表示形式的字符串转换为Ruby中的整数,请Integer在其上调用该函数.

Integer("0x0000FF") # => 255
Run Code Online (Sandbox Code Playgroud)


wxi*_*eng 6

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