【问题标题】:Ruby: How to convert a list of integers into a hexadecimal string?Ruby:如何将整数列表转换为十六进制字符串?
【发布时间】:2017-04-02 15:07:12
【问题描述】:

我有一个整数数组,范围从0255,每个代表两个十六进制数字。我想使用 Ruby 将此数组转换为一个十六进制字符串。我该怎么做?

【问题讨论】:

  • 这样的事情有帮助吗? stackoverflow.com/questions/84421/…
  • arr.map { |n| n.to_s(16) }.join('')
  • @Antonio 我看到了,但它会将1 之类的字符转换为1 而不是01,这是一个问题,因为每个元素代表两个十六进制字符。
  • arr.map { |n| sprintf('%02x', n) }.join('')
  • ...或@Dave #2 的变体:[0, 128, 255].each_with_object('') { |n,s| s << "%02x" % n } #=> "0080ff"..(."%02x" % n).upcase..,如果需要 => "0080FF"

标签: ruby


【解决方案1】:

使用 packunpack:(或 Ruby 2.4+ 中的 unpack1

[0, 128, 255].pack('C*').unpack('H*')[0]
#=> "0080ff"

[0, 128, 255].pack('C*').unpack1('H*')
#=> "0080ff"

pack('C*')已经返回了实际的二进制十六进制字符串:

[0, 128, 255].pack('C*')
#=> "\x00\x80\xFF"

unpack('H*') 然后将其转换回人类可读的表示形式。

【讨论】:

  • 如果速度很重要,这大约是另一个答案的两倍。
  • 啊,忘记了;这肯定会更快。
【解决方案2】:

我会这样做:

array = [0, 128, 255]
array.map { |number| number.to_s(16).rjust(2, '0') }.join
#=> "0080ff"

【讨论】:

    猜你喜欢
    • 2010-09-10
    • 2015-11-29
    • 2017-08-12
    • 2014-12-15
    • 2013-12-07
    相关资源
    最近更新 更多