私はあなたの質問を最初に完全に誤解していたと思います。
なぜApache Commons Base32デコードで空の配列 が返されますか?
回答です。これはApache Commons Base32デコードライブラリだけではありませんが、よく書かれたベース32デコードアルゴリズムは空の値を返します。どうして? base32エンコーディングアルゴリズムがエンコーディングの結果として "F ======="という文字列を生成することはできません。
デコードされた文字列 "F8 ======"の例を使って、base32デコードアルゴリズムを理解してみましょう。 "="は実際のbase32文字ではないことに注意してください。これは単にパディングに使用されます。実際のコード化された文字列は "F8"です。
Base32hex character mapを見ると、Fと8の小数値はそれぞれ15と8であり、それぞれ00001111と00001000という2進数で表されます。 Base32が意味するように、5ビット(32 = 2^5)のセットで動作します。したがって、5ビットの組にグループ化されたときの同じ2進数は、それぞれ01111および01000として表される。アルゴリズムごとに、これらの5ビットセットは、「01111 01000」または「0111101000」としてスペースなしで一緒に配置されます。次に、この番号は、左から "01111010 00"を与える8ビットのセットにグループ化される。ここで2番目のセットは8ビットすべてを持っていないので不完全なセットなので、破棄されて01111010という値を残します。これは10進数に変換すると122になります。値122はASCII文字 'z'にマッピングされます。したがって、 "F8"の解読の答えは "z"です。
このアルゴリズムを「F =======」の例で適用すると、パディングを破棄すると「F」だけになりますが、不完全なセットである「01111」のセットだけが得られますそれは8ビットすべてを持っていないからです。したがって、空の値が結果として返されます。
出典
2017-01-26 19:38:48
VHS
ブール値は私が使用しているBase32hexアルファベット(Triacontakaidecimal)の使用です。 – KDoyle
私はapacheのCommons Base32.decodeソースに行きました。バイト配列を入力として使用します。あなたには文字列があります。 "F ======="を使用します。getBytes() –
はい。そこにタイプミス。私は編集します。 getBytes()はまだ空の配列にデコードします。キャッチをありがとう。 – KDoyle