【问题标题】:Decode hexadecimal string in Ruby [duplicate]在Ruby中解码十六进制字符串[重复]
【发布时间】:2012-04-14 04:45:31
【问题描述】:

可能重复:
Hex to binary in ruby

在 Python 中,我可以执行以下操作:

>>> str = '000E0000000000'
>>> str.decode('hex')
'\x00\x0e\x00\x00\x00\x00\x00'

如果我必须在 ruby​​ 中实现相同的输出,我可以进行哪个调用?我尝试了to_s(16),这似乎不起作用。我需要输出采用该特定格式,所以我希望得到以下内容:

"\\x00\\x0e\\x00\\x00\\x00\\x00\\x00"

【问题讨论】:

标签: ruby


【解决方案1】:
irb(main):002:0> [str].pack('H*')
# => "\x00\x0E\x00\x00\x00\x00\x00"

或者(仅限 Ruby 1.9):

irb(main):004:0> str.scan(/../).map(&:hex).map(&:chr).join
# => "\x00\x0E\x00\x00\x00\x00\x00"

如果需要格式化字符串:

irb(main):005:0> s = str.scan(/../).map { |c| "\\x%02x" % c.hex }.join
=> "\\x00\\x0e\\x00\\x00\\x00\\x00\\x00"
irb(main):006:0> puts s
\x00\x0e\x00\x00\x00\x00\x00
=> nil

【讨论】:

  • 我得到 => "\000\016\000\000\000\000\000" 为您的解决方案我正在运行 1.8.7 ruby​​
  • @Pavan:这是正确的,看到"\000\016" == "\x00\x0e"
  • 问题是我需要获取 \x00 格式而不是 \000 格式,因为 url 接收器抱怨格式无效,而 python 解码打印 \x00 格式并且 url 接收器不会抱怨
  • @Pavan:这是格式问题。那么你想要的是一个像"\\x00\\x0e..." 这样的字符串。让我快速破解它。
  • @Pavan:检查我的编辑。另外,我编辑了您的问题以反映您的其他问题。
猜你喜欢
  • 2018-08-21
  • 2015-05-13
  • 2020-11-11
  • 2011-03-18
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 2013-01-09
  • 2019-01-26
相关资源
最近更新 更多