2014-04-09 70 views
18

我有一個包含ASCII字符十六進制代碼值的字符串,例如, "666f6f626172"。我想將其轉換爲相應的字符串("foobar")。使用十六進制ASCII碼將字符串轉換爲字符

這是工作,但醜:

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

有沒有更好的(更簡潔)的方式?某種程度上可以幫助unpack嗎?

+7

類似'[「666f6f626172」]包(「H *」)'? – Stefan

+1

@Stefan。對就像那樣。您能否將此作爲答案發布? –

回答

36

您可以使用Array#pack

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

H是一個十六進制字符串指令(高字節在前)。

+15

'pack' /'unpack'對我來說永遠是個謎。 –

14

斯特凡已經釘它,但這裏是你可能想弄走了另一個時間和地點的選擇:

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