3

Linuxの「ソート」ユーティリティを使用してソートしている16進数でエンコードされたMD5値の大量のファイルがあります。その結果、ハッシュが順番に出力されます (これは、処理の次の段階で必要なものです)。例えば:

000001C35AE83CEFE245D255FFC4CE11 
000003E4B110FE637E0B4172B386ACAC 
000004AAD0EB3D896B654A960B0111FA

ソート操作を高速化する (およびファイルを小さくする) ために、データを base32 または base64 としてエンコードすることを検討していました。

問題は、base32/64 データのアルファソートで同じ結果が得られるかどうかです。私の簡単なテストは、それが機能することを示しているようです。たとえば、上記の 3 つの 16 進文字列は、これらの base64 文字列に 1:1 で対応します。

AAABw1roPO/iRdJV/8TOEQ==
AAAD5LEQ/mN+C0Fys4asrA==
AAAEqtDrPYlrZUqWCwER+g==

しかし、「/」や「+」などの Base64 で使用される特殊文字に関するソート順と、それらがアルファソートのコンテキストでどのように扱われるかについてはわかりません。

注:たまたまLinuxのソートユーティリティを使用していますが、質問は他のアルファソートツールにも当てはまります。使用されるツールは、実際には問題の一部ではありません。

4

1 に答える 1

7

それ以来、標準の base32/64 実装ではこれが不可能であることを発見しました。ただし、ソート順序を保持する「 base32hex 」と呼ばれる base32 バリエーションが存在しますが、公式の「 base64hex 」に相当するものはありません。

このようにカスタムエンコーディングを作成するように見えます。

編集:これは解決するのが非常に簡単であることが判明しました。Base 64 でエンコードし、ソート順を尊重するカスタム文字テーブルを使用して文字を文字に変換するだけです。

標準の Mime 64 文字からマッピングするだけです。

  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

このようなものに:

  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz|~"

その後、ソートが機能します。

于 2016-05-26T22:10:04.220 に答える