2011-05-12 53 views
9

我试图将十六进制值转换为二进制值(十六进制字符串中的每一位都应该有一个等效的四位二进制值)。我被建议使用这个:在红宝石中将十六进制数字转换为二进制

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

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

回答

9

你也可以这样做:

num = "0ff" 
num.hex.to_s(2).rjust(num.size*4, '0') 

你可能有已经计算出来了,但是,num.size*4是您想要用0填充输出的位数,因为一个十六进制数字由四位表示(log_2 1 6 = 4)二进制数字。

+4

或者更一般地说,'num.to_i(16).to_s(2)' – Phrogz 2011-05-12 17:54:36

相关问题