ruby包和十六进制值

Joh*_*ino 4 ruby hex unpack decoding pack

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

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

'一个'

那个角色是2 ^ 8:

 'A'.unpack('B*')
 => ["01000001"] 
Run Code Online (Sandbox Code Playgroud)

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

 01000001 == 41
Run Code Online (Sandbox Code Playgroud)

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

['A'].pack('H')
 => "\xA0" 
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*fan 9

我想你想要unpack:

'A'.unpack('H*') #=> ["41"]
Run Code Online (Sandbox Code Playgroud)

pack 反之亦然:

['41'].pack('H*') #=> "A"
Run Code Online (Sandbox Code Playgroud)

  • 这些是来自String类的2个方法我仍然无法理解:( (2认同)