Konversi basis (CJam)
Cara mudah untuk menyandikan string ASCII yang tidak dimulai dengan byte nol adalah mengkonversi dari basis 128 ke integer, kemudian ke basis 256:
128b256b:c e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.
Ini menggunakan 7 bit untuk mengkodekan setiap karakter ASCII.
Jika string asli hanya terdiri dari, misalnya, huruf kecil, dan tidak dimulai dengan huruf a , kita bisa mulai dengan memetakan "a...z"
ke [0 ... 25]
, kemudian melanjutkan seperti di atas:
'afm26b256b:c e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.
Akhirnya, jika string asli hanya memiliki beberapa karakter unik (umum dalam seni ASCII), biasanya lebih baik untuk menentukan alfabet secara eksplisit.
Sebagai contoh:
" +-/\|"f#6b256b:c e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.
Sebagai aturan praktis, Anda ingin karakter pertama dari string asli menjadi karakter kedua dari alfabet, karakter berbeda berikutnya dari string asli menjadi karakter pertama dari alfabet, karakter berbeda berikutnya dari string asli menjadi menjadi karakter ketiga alfabet, karakter berbeda berikutnya dari string asli menjadi karakter keempat alfabet, dll.
Encoder dari contoh terakhir berfungsi sebagai berikut:
" +-/\|"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.
Dekoder contoh terakhir berfungsi sebagai berikut:
256b6b e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.