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

时间:2011-05-18 06:55:48

标签: ruby

我的情况是我需要在ruby中将二进制值转换为十六进制,如下所示:
如果bin =“0000111”那么我的输出应该是:hex =“07”
&安培;假设如果bin =“010001111”则o / p应为:hex =“08f”
有人可以帮我解决如何做到这一点..提前谢谢..

4 个答案:

答案 0 :(得分:11)

怎么样:

>> "0x%02x" % "0000111".to_i(2) #=> "0x07"
>> "0x%02x" % "010001111".to_i(2) #=> "0x8f"

编辑:如果您不希望输出为0x..,但只有0..会遗漏格式字符串中的第一个x

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:5)

String#to_iInteger#to_s都采用可选的整数参数来指定基数。因此,您可以使用base 2将二进制字符串转换为整数,然后使用base 16将该整数转换回字符串。

答案 3 :(得分:0)

您可以在指向目标为十六进制的字符串上使用unpack方法

def bin_to_hex(binary_string)
  binary_string.unpack('H*').first
end

引用:https://apidock.com/ruby/String/unpack

我发现它比上面列出的解决方案干净得多。