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

sun*_*dar 6 ruby binary hex

我有一种情况,我需要在ruby中将二进制值转换为十六进制,如下所示:
如果bin ="0000111"那么我的输出应该是:hex ="07"
并假设如果bin ="010001111"那么o/p应该be:hex ="08f"
有人可以帮我解决这个问题..提前谢谢..

Mic*_*ohl 13

怎么样:

>> "0x%02x" % "0000111".to_i(2) #=> "0x07"
>> "0x%02x" % "010001111".to_i(2) #=> "0x8f"
Run Code Online (Sandbox Code Playgroud)

编辑:如果您不想输出,0x..只是0..省略x格式字符串中的第一个.


odi*_*ity 9

def bin_to_hex(s)
    s.each_byte.map { |b| b.to_s(16).rjust(2,'0') }.join
end
Run Code Online (Sandbox Code Playgroud)

我在这里找到的(零填充修改):

http://anthonylewis.com/2011/02/09/to-hex-and-back-with-ruby/


sep*_*p2k 5

两者String#to_iInteger#to_s一个可选的整数参数指定的基础.因此,您可以使用base 2将二进制字符串转换为整数,然后使用base 16将该整数转换回字符串.

  • @sundar:您可以使用“String#%”(又名“sprintf”)而不是“to_s”来适当地格式化数字 - 使用“%02x”将数字格式化为使用 0 填充到 2 位数字的十六进制数字。然而,如果您想要 16 以外的基数(或者如果您使用“d”而不是“x”则为 10),则此方法不起作用,因为“%”不允许您选择任意基数。或者,您可以使用“to_s”,后跟“String#rjust”,它适用于任意基数和填充字符。 (2认同)