ニブルは 4 ビットです。つまり、16 (2^4) 個の可能な値があることを意味します。つまり、16 進数は 16 進数であるため、ニブルは 1 桁の 16 進数に対応します。1 バイトは 2^8 であるため、2 桁の 16 進数、つまり 2 ニブルで表すことができます。
したがって、以下に1バイト文字があります。
「あ」
その文字は 2^8 です:
'A'.unpack('B*')
=> ["01000001"]
つまり、2 桁の 16 進数で表す必要があります。
01000001 == 41
Ruby のドキュメントによると、Array メソッド パックの場合、aTemplateString (パラメーター) が 'H' の場合、16 進文字列が返されます。しかし、これは私が返すものです:
['A'].pack('H')
=> "\xA0"
私の最初のポイントは、それが返すべき16進値ではないということです。16 進値の 41 を返す必要があります。2 番目のポイントはニブルの概念です。上で説明したように、1 バイトに対して 2 つのニブルを返す必要があることを意味します。ただし、「A」は 1 バイトで 2 つのニブルがあるにもかかわらず、入力には 1 つのニブルしかないと見なされるため、上記では 0 が挿入されます。明らかに、ここで何かが欠けています。