バイナリデータをエンコードするために1つのグループとして5ビットを使用するエンコードはありますか?
AZには26文字が含まれ、0〜9には10文字が含まれます。5ビットエンコーディングに十分な合計36文字があります(32の組み合わせのみ)。
OctalやHexadecimalの代わりに5ビットエンコーディングを使用しないのはなぜですか?
はい。Base32です。名前はTriacontakaidecimalかもしれませんが、長すぎて覚えにくいので、単純にbase 32と呼んでいます。同様に、6 ビットのグループ用のBase64もあります。
base32 は、base64 と比較して多くのスペースを浪費し、16 進数 (8、16、32、または 64 で正確に割り切れる) と比較して奇数のビットを使用するため、16 進数や base64 よりも一般的ではありません。6 も偶数なので、バイナリ コンピューターでは 5 よりも優れています。
@S.Lott のコメントで述べたように、base64 (6 ビット) は、コンパクトさが重要な場合にバイナリ データをテキストとしてエンコードするためによく使用されます。
デバッグの目的 (16 進ダンプなど) では、1 バイトのサイズが 4 ビットで割り切れるため、16 進を使用します。そのため、各バイトは、周囲に他のバイトが何であっても、1 つの一意の 2 桁の 16 進表現を持ちます。これにより、16 進ダンプを見るときに個々のバイトを「見る」ことが容易になり、8 ビット 2 進と 2 桁 16 進の間で精神的に変換することも比較的簡単になります。(base64 では、バイトとエンコードされた文字の間に 1:1 の対応はありません。同じバイトでも、その位置と隣接する他のバイトの値に応じて、異なる文字が生成される可能性があります。)
もちろん:
Welcome to Clozure Common Lisp Version 1.7-dev-r14614M-trunk (DarwinX8664)!
? (let ((*print-base* 32)) (print 1234567))
15LK7
1234567
? (let ((*print-base* 32)) (print (expt 45 19)))
KAD5A5KM53ADJVMPNTHPL
25765451768359987049102783203125
?