Grundkonvertierung (CJam)
Eine einfache Möglichkeit, ASCII-Zeichenfolgen zu codieren, die nicht mit einem Null-Byte beginnen, besteht darin, sie von der Basis 128 in eine Ganzzahl und dann in die Basis 256 zu konvertieren:
128b256b:c e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.
Dies verwendet 7 Bits, um jedes ASCII-Zeichen zu codieren.
Wenn die ursprüngliche Zeichenfolge nur aus z. B. Kleinbuchstaben besteht und nicht mit einem a beginnt, können wir mit der Zuordnung "a...z"
zu beginnen. Gehen Sie [0 ... 25]
dann wie oben vor:
'afm26b256b:c e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.
Wenn die ursprüngliche Zeichenfolge nur wenige eindeutige Zeichen enthält (wie in ASCII-Grafiken üblich), ist es in der Regel besser, das Alphabet explizit anzugeben.
Beispielsweise:
" +-/\|"f#6b256b:c e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.
Als Faustregel möchten Sie, dass das erste Zeichen der ursprünglichen Zeichenfolge das zweite Zeichen des Alphabets ist, das nächste eindeutige Zeichen der ursprünglichen Zeichenfolge das erste Zeichen des Alphabets und das nächste eindeutige Zeichen der ursprünglichen Zeichenfolge Das dritte Zeichen des Alphabets, das nächste eindeutige Zeichen der ursprünglichen Zeichenfolge das vierte Zeichen des Alphabets usw.
Der Encoder des letzten Beispiels funktioniert wie folgt:
" +-/\|"f# e# Replace each character by its index in that string.
6b256b e# Convert from base 6 (length of the alphabet) to base 256.
:c e# Cast each digit to character.
Der Decoder des letzten Beispiels funktioniert wie folgt:
256b6b e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.