在ruby中将十六进制数转换为二进制数

sun*_*dar 11 ruby

我试图将十六进制值转换为二进制值(十六进制字符串中的每个位应具有等效的四位二进制值).我被建议用这个:

num = "0ff" # (say for eg.)
bin = "%0#{num.size*4}b" % num.hex.to_i
Run Code Online (Sandbox Code Playgroud)

这给了我正确的输出000011111111.我很困惑这是如何工作的,特别是%0#{num.size*4}b.有人可以帮我吗?

saw*_*awa 11

你也可以这样做:

num = "0ff"
num.hex.to_s(2).rjust(num.size*4, '0')
Run Code Online (Sandbox Code Playgroud)

您可能已经想通了,但是,num.size*4您想要将输出填充到的0位数是因为一个十六进制数字由四个(log_2 16 = 4)二进制数字表示.

  • 或者,更一般地说,`num.to_i(16).to_s(2)` (5认同)