ruby包和十六进制值

时间:2013-06-20 19:49:31

标签: ruby decoding pack hex unpack

半字节是四位。这意味着有16(2 ^ 4)个可能的值。这意味着半字节对应于单个十六进制数字,因为十六进制是16位。字节是2 ^ 8,因此可以用2个十六进制数字表示,因此可以用2个半字节表示。

所以下面我有一个1字节的字符:

'A'

该字符是2 ^ 8:

 'A'.unpack('B*')
 => ["01000001"] 

这意味着它应该由两个十六进制数字表示:

 01000001 == 41

根据Ruby文档,对于Array方法包,当aTemplateString(参数)等于'H'时,它将返回一个十六进制字符串。但这就是我的回报:

['A'].pack('H')
 => "\xA0" 

我的第一点是它不应该返回的十六进制值。它应该返回十六进制值41.第二点是半字节的概念,正如我上面解释的那样,意味着1个字节,它应该返回两个半字节。但在它上面插入一个0,因为它认为输入只有1个半字节,即使'A'是一个字节并且有两个半字节。很明显,我在这里遗漏了一些东西。

2 个答案:

答案 0 :(得分:7)

我想你想要unpack

'A'.unpack('H*') #=> ["41"]

pack恰恰相反:

['41'].pack('H*') #=> "A"

答案 1 :(得分:0)

这很棘手。 [“1”]。pack(“H”)=> “\ x10”和[“16”]。pack(“H”)=> “\ X10”。我花了很长时间才明白这一点。