半字节是四位。这意味着有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'是一个字节并且有两个半字节。很明显,我在这里遗漏了一些东西。