base64で16進エンコーディングを使用する理由について少し興味があります。Base64の方が効率的だと思います。特に、データベースが常に16進エンコーディングを使用しているように見えるのはなぜですか?それは歴史的な問題ですか、それとも16進エンコーディングについて何かが欠けていますか?
6 に答える
画面を読み上げるには、本物のオタクである必要がありBASE64
ます。
でOracle
、を実行すると、フィールドHEXTORAW
に何が含まれているのかがわかりますが、ではわかりませんでした。RAW
BASE64
たとえば、たくさんのを見ると、0x3F
エンコーディングに何かがあることがわかります。
内部的には、これらは単なるバイナリバイトであり、エンコードする必要はありませんが、画面の反対側にいる人に表示する必要があります。
これは、効率的なスペースの使用と読みやすさの間の適切な妥協点です。ビットパターンは16進数で非常に明確になりますが、他の基数はそれほど明確ではありません。
0x8080と32896のどちらが読みやすいですか?16進値はです。
また、各16進数がニブルに等しい(したがって、各ペアが1バイトに等しい)という優れた特性もあります。
Base 64よりも、頭の中の16進数を理解する方がはるかに簡単です。
データベースに関しては、データの表示方法と保存方法に違いがあることに注意してください。ほとんどの場合、データを16進数で表示するだけです。
結果の値をWindowsでファイル名として使用する場合、base64は大文字と小文字の両方を使用するため、Base64は機能しません。同様の理由で使用できない場合もあると思います。
読みやすさに関する他の回答に同意します。16進数は8ビットバイトにうまく整列しますが、base64の「数字」はそうではなく、1桁には2バイトの一部を含めることができます。
文字列ストレージ(「潜在的に」XMLセーフエンコーディングを使用)の場合、base64の4/3ではなく5/4の肥大化であるため、ASCII85を使用するとさらに効率を上げることができます。
ただし、base64よりも「読み取る」のはさらに困難です。また、これをサポートしているアプリケーションは多くないため、エンコードとデコードを行うために独自のクラス/関数を作成する必要があります。
データベースが実際にデータをバイナリとして格納していると思いますが、クエリエディタは16進エンコーディングを使用してデータを表示します。これは、SQLServerクエリアナライザーが行うことです。
個人的な好みの問題だと思います...16進数は、Base32またはBase64の何かよりもはるかに読みやすいです。