我的情况是我需要在ruby中将二进制值转换为十六进制,如下所示:
如果bin =“0000111”那么我的输出应该是:hex =“07”
&安培;假设如果bin =“010001111”则o / p应为:hex =“08f”
有人可以帮我解决如何做到这一点..提前谢谢..
答案 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_i
和Integer#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
我发现它比上面列出的解决方案干净得多。