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'是一个字节并且有两个半字节.很明显我在这里遗漏了一些东西.
我想你想要unpack:
'A'.unpack('H*') #=> ["41"]
Run Code Online (Sandbox Code Playgroud)
pack 反之亦然:
['41'].pack('H*') #=> "A"
Run Code Online (Sandbox Code Playgroud)