Bu soru için mükemmel zamanlama. @isaacg bugün bu sayıları son derece kısaltmayı sağlayan yeni bir özellik ekledi.
Temel teknik, sayıyı taban 256'ya ve karakterlere dönüştürmektir. Bunu kodu kullanarak yapabilirsiniz ++NsCMjQ256N
. Ardından, sonuç dizesini C
tam tersini yapan (ile karakterleri int'e dönüştürün ve sonucu temel 256 sayısı olarak yorumlayın) ile birlikte kullanabilirsiniz. Yani 13 karakter olsun: C"2ìÙ½}ü¶d"
. Karakterlerin bazıları yazdırılamaz.
Ama 13 CHARS dediğime dikkat et, bayt değil. Karakterleri kopyalayıp https://mothereff.in/byte-counter ile sayarsam , 13 karakter ve 18 bayt yazıyor. Bunun nedeni varsayılan olarak UTF-8 olan karakterlerin karakter kodlamasıdır. UTF-8 sadece 2 ^ 7 farklı 1 baytlık karaktere izin verir. Her karakter c
ile ord(c) > 127
aslında ikisini kullanıyor saklanan alır bir yerine bayt.
Ve işte @ isaacg'ın yeni özelliği devreye giriyor. Varsayılan kod formatını UTF-8'den iso-8859-1'e değiştirdi. iso-8859, sadece 1 baytlı 256 karakteri temsil edebilir. Böylece aslında 13 BYTE'ye ulaşabilirsiniz. Bu sadece standart derleyici ile mümkündür, ancak bu çevrimiçi derleyicide çalışmaz.
Öncelikle bu komut dosyasını kullanarak altıgen-değerlere sayı dönüştürmek istiyorum: jdm.[2.Hd"0"jQ256
. Bu sana verir 12 32 ec d9 bd 07 7d fc b6 64
. Daha sonra bu sayıları bir hex-editor (örn. Linux için hexedit) kullanarak kod dosyanıza kopyalayın.
Farkına varmak:
- Açıkça
"
, dize kodun son parçasıysa, sonunda kaldırın .
- Bu yalnızca sayıların taban-256 göstergesinde (
34
bayt 22
) yoksa çalışır , çünkü bu "
karakterdir ve dizeyi sona erdirir. Kaçan olsa da çalışır ( 5C 22
).
- Btw, onaltılık düzenleyici ile bir dosyayı açtığınızda muhtemelen bayt
0A
veya 0d 0a
sonunda kaldırabileceğiniz bir dosya göreceksiniz . Bu sadece satırın sonunu gösterir.