xxencode は、 uuencodeに似たバイナリからテキストへのエンコード方式で、英数字とプラス記号、マイナス記号のみを使用します。これは、特にASCIIとIBM メインフレームで使用されるEBCDICエンコード間の文字セット変換に耐えられる形式でファイルを転送する手段として考案されました。[ 1 ]
xxエンコードされたデータは、次の形式の行で始まります。
開始 <モード> <ファイル>
ここで、<mode>はファイルの読み取り/書き込み/実行権限を8進数3桁で表したもので、<file>はバイナリデータを再作成する際に使用するファイル名です。
xxencode は 3 バイトのグループを繰り返し受け取り、残りのバイト数が 3 バイト未満の場合は末尾にゼロを追加します。これらの 24 ビットは 4 つの 6 ビットの数値に分割され、それぞれが次の形式に変換されます。次の表の 番目の文字:
1 2 3 4 5 6 012345678901234567890123456789012345678901234567890123 | | | | | | | +-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
60文字の出力グループ(入力バイト数45バイトに相当)は、それぞれ別の行として出力され、各行の先頭には、その行に含まれるエンコードされたバイト数を表すエンコードされた文字が付きます。最後の行を除くすべての行では、この文字は「h」(値45に対応する文字)になります。入力が45で割り切れない場合、最後の行には残りのN文字の出力が、上記のようにエンコードされた残りの入力バイト数とともに出力されます。最後に、単一のスペース(またはプラス記号)のみを含む行が出力され、その後に「end」という文字列を含む行が出力されます。
xxエンコードされたデータは、通常、行の最初の文字(Xxエンコードの場合は「h」、Uuエンコードの場合は「M」)によってUuエンコードされたデータと区別できます。これは、出力に少なくとも1行(エンコードされた45バイト/60文字)の完全な長さのデータが含まれていることを前提としています。
以下は、1行のテキストファイルをxxencodingでエンコードした例です。この例では、%0Dはキャリッジリターン(CR)のバイト表現、%0Aはラインフィード(LF)のバイト表現です。
ファイル名 = wikipedia-url.txt ファイルの内容 = http://www.wikipedia.org%0D%0Abegin 644 wikipedia-url.txt OO5FoQ1cj9rRrRmtrOKhdQ4JYOK2iPr7b1Ec+ 終わり