将包含十六进制ASCII码的字符串转换为字符

32

我有一个包含ASCII字符的十六进制代码值的字符串,例如"666f6f626172"。 我想将其转换为相应的字符串("foobar")。

这个方法可以实现但很丑陋:

"666f6f626172".scan(/../).map(&:hex).map(&:chr).join # => "foobar"

有更好的方法吗?unpack 会不会有所帮助?


7
你喜欢这样写吗?["666f6f626172"].pack('H*') - Stefan
1
@Stefan。是的,就像那样。你能把这个发表为答案吗? - undur_gongor
2个回答

65

您可以使用Array#pack方法:

["666f6f626172"].pack('H*')
#=> "foobar"

H 是一个十六进制字符串的指令(高位在前)。


34
“pack”/“unpack”对我来说永远是个谜。 - undur_gongor

23

Stefan已经做得很好了,但这里有一个备选方案,你可能想留到另一个时间和地点使用:

"666f6f626172".gsub(/../) { |pair| pair.hex.chr } # => "foobar"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接