4

ニブルは 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 が挿入されます。明らかに、ここで何かが欠けています。

4

2 に答える 2