Chuyển đổi cơ sở (CJam)
Một cách dễ dàng để mã hóa các chuỗi ASCII không bắt đầu bằng byte null là chuyển đổi từ cơ sở 128 sang số nguyên, sau đó sang cơ sở 256:
128b256b:c e# Prints encoded string.
128b256b:c`"256b128b:c" e# Prints encoded string with decoder.
Điều này sử dụng 7 bit để mã hóa mỗi ký tự ASCII.
Nếu chuỗi ban đầu chỉ bao gồm, ví dụ, các chữ cái viết thường và không bắt đầu bằng a , chúng ta có thể bắt đầu bằng cách ánh xạ "a...z"
tới [0 ... 25]
, sau đó tiến hành như trên:
'afm26b256b:c e# Prints encoded string.
'afm26b256b:c`"256b26b'af+" e# Prints encoded string with decoder.
Cuối cùng, nếu chuỗi gốc chỉ có một vài ký tự duy nhất (phổ biến trong nghệ thuật ASCII), thì tốt hơn là chỉ định rõ ràng bảng chữ cái.
Ví dụ:
" +-/\|"f#6b256b:c e# Prints encoded string.
" +-/\|"f#6b256b:c`"256b6b"" +-/\|"`"f=" e# Prints encoded string with decoder.
Theo nguyên tắc thông thường, bạn muốn ký tự đầu tiên của chuỗi gốc là ký tự thứ hai của bảng chữ cái, ký tự phân biệt tiếp theo của chuỗi gốc là ký tự đầu tiên của bảng chữ cái, ký tự phân biệt tiếp theo của chuỗi gốc là ký tự thứ ba của bảng chữ cái, ký tự phân biệt tiếp theo của chuỗi gốc là ký tự thứ tư của bảng chữ cái, v.v.
Bộ mã hóa của ví dụ cuối hoạt động như sau:
" +-/\|"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.
Bộ giải mã của ví dụ cuối hoạt động như sau:
256b6b e# Convert from base 256 to base 6.
" +-/\|"f= e# Replace each digit by the corresponding character of the alphabet.