一个半字节是四位。这意味着有 16 (2^4) 个可能的值。这意味着一个半字节对应一个十六进制数字,因为十六进制是基数 16。一个字节是 2^8,因此可以用 2 个十六进制数字表示,因此可以用 2 个半字节表示。
所以下面我有一个 1 字节的字符:
'一个'
那个字符是 2^8:
'A'.unpack('B*')
=> ["01000001"]
这意味着它应该由两个十六进制数字表示:
01000001 == 41
根据 Ruby 文档,对于 Array 方法包,当 aTemplateString(参数)等于 'H' 时,它将返回一个十六进制字符串。但这就是我得到的:
['A'].pack('H')
=> "\xA0"
我的第一点是这不是它应该返回的十六进制值。它应该返回 41 的十六进制值。第二点是半字节的概念,正如我在上面解释的,意味着对于 1 个字节,它应该返回两个半字节。但是在它上面插入了一个 0,因为它认为输入只有 1 个半字节,即使“A”是一个字节并且有两个半字节。很明显,我在这里遗漏了一些东西。