Xxencoding


xxencode is a binary-to-text encoding similar to uuencode which uses only the alphanumeric characters, and the plus and minus signs. It was invented as a means to transfer files in a format which would survive character set translation, particularly that between ASCII and the EBCDIC encoding used on IBM mainframes.

The encoding process

xxencoded data starts with a line of the form:
begin
Where is the file's read/write/execute permissions as three octal digits, and is the name to be used when recreating the binary data.
xxencode repeatedly takes in groups of three bytes, adding trailing zeroes if there are fewer than three bytes left. These 24 bits are split into four 6-bit numbers, each of which is then translated to the th character in the following table:
1 2 3 4 5 6
0123456789012345678901234567890123456789012345678901234567890123
| | | | | | |
+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Each group of sixty output characters is output as a separate line preceded by an encoded character giving the number of encoded bytes on that line. For all lines except the last, this will be the character 'h'. If the input is not evenly divisible by 45, the last line will contain the remaining N output characters, preceded by the number of remaining input bytes encoded as above. Finally, a line containing just a single space is output, followed by one line containing the string "end".
xxencoded data is generally distinguishable from Uuencoded data by the first character of the line. This assumes at least one full-length line in the output.

Example

The following is an example of xxencoding a one-line text file. In this example, %0D is the byte representation for carriage return, and %0A is the byte representation for line feed.
;file
File Name = wikipedia-url.txt
File Contents = http://www.wikipedia.org%0D%0A
;xxencoding
begin 644 wikipedia-url.txt
OO5FoQ1cj9rRrRmtrOKhdQ4JYOK2iPr7b1Ec+
end