我有一种情况,我需要在红宝石中将二进制值转换为十六进制,如下所示:
如果bin =“0000111”,那么我的输出应该是:hex =“07”
&想,如果仓=“010001111”则O/p应该是:十六进制=“08F”
可能有人帮助我如何做到这一点..在此先感谢..在红宝石中将二进制值转换为十六进制
回答
如何转换该整数回字符串:
>> "0x%02x" % "0000111".to_i(2) #=> "0x07"
>> "0x%02x" % "010001111".to_i(2) #=> "0x8f"
编辑:输出,如果你不想为0x..
,但只是0..
在格式字符串中省略了第一个x
。
两个String#to_i
和Integer#to_s
取指定基数的可选整数参数。所以,你可以使用基地2您的二进制字符串转换为整数,然后用底座16
嘿感谢你的回应..正如你说如果我使用“11111”.to_i(2).to_s(16)它给了我“1f”,但如果我给“01111”.to_i(2).to_s(16)它只给我“f”,但我想要“0f” – sundar 2011-05-18 07:06:46
@sundar:你可以使用'String#%'(aka 'sprintf')而不是'to_s'来适当地格式化数字 - 使用'%02x'将数字格式化为使用0填充为2位的十六进制数字。然而,如果你想要一个非16的基础(或者如果你使用'd'而不是'x'',那么这是行不通的),因为'%'不允许你选择一个任意的基础。或者,你可以使用'to_s'后跟'String#rjust',它可以与任意基和填充字符一起工作。 – sepp2k 2011-05-18 07:15:03
嘿感谢这么多的工作.. – sundar 2011-05-18 08:07:37
我喜欢这个答案最好:
def bin_to_hex(s)
s.each_byte.map { |b| b.to_s(16) }.join
end
,我发现在这里:
http://anthonylewis.com/2011/02/09/to-hex-and-back-with-ruby/
UPDATE
我发现它不垫0正常,所以我修改了它对此:
def bin_to_hex(s)
s.each_byte.map { |b| b.to_s(16).rjust(2,'0') }.join
end
我不知道人们是如何声称它有效的!对我来说,使用ruby 4.1,它会给出:''1111'.each_byte.map {| b | b.to_s(16)}。加入 =>“31313131”'(我想''f“'或类似的东西)。 – Djunzu 2017-04-02 20:22:50
@Djunzu你在谈论不同的东西。字符串“1111”有四个字节,每个字符的值都是49(即ASCII值)。十进制中的49是十六进制的31。在这个问题正在讨论的意义上,你没有“二元”价值。您有一个包含ASCII字符“1”和“0”的字符串。 – Ryan 2017-07-03 00:14:06
@Djunzu其实,没关系。我刚刚意识到,实际上,你是对的,答案是在错误的意义上使用“二元”。 – Ryan 2017-07-03 00:15:41
- 1. 在红宝石中将十六进制数字转换为二进制
- 2. 十六进制到十进制转换红宝石
- 3. 将十六进制转换为二进制到十六进制?
- 4. 将十进制转换为十六进制/二进制
- 5. 十六进制转换为二进制
- 6. 十六进制转换为二进制
- 7. 将十进制转换为十六进制和十六进制
- 8. 在VB6中将十六进制值转换为十进制值
- 9. 将十六进制值转换为二进制值
- 10. 将十六进制转换为二进制,然后转换为十进制
- 11. 在Visual C++中将十进制值转换为十六进制
- 12. 在Python中将十六进制值转换为十进制
- 13. 将二进制位转换为十六进制值
- 14. 将十六进制(二进制补码)转换为Java值
- 15. 在程序集中将二进制转换为十六进制
- 16. 在Perl中将十六进制转换为二进制文件
- 17. 二进制转换为十六进制和十六进制转换为二进制
- 18. 将十进制转换为二进制,八进制和十六进制?
- 19. 将十进制数转换为二进制/十六进制/八进制符号
- 20. 十六进制到二进制转换
- 21. 转换十六进制到二进制
- 22. 二进制到十六进制转换
- 23. 转换为八进制,二进制和十六进制在JavaScript
- 24. 混淆将C++中的十六进制转换为二进制
- 25. 将字符串转换为红宝石中的十进制数
- 26. 将八进制数转换为十进制和十六进制
- 27. 将十六进制值转换为ascii
- 28. 将十六进制值转换为bigint
- 29. 将十进制转换为十六进制值
- 30. 将十六进制转换为十进制值
嘿谢谢你这么多.. – sundar 2011-05-18 08:08:08
当我传入'1'一个单一的二进制位,这将转换为001.不应该在十六进制转换为'1'吗? – uptownhr 2015-01-13 16:06:27
''' (“0%02x”%binary.to_i(2))#=>“001” – uptownhr 2015-01-13 16:08:57