Moment idéal pour cette question. @isaacg vient d'ajouter une nouvelle fonctionnalité aujourd'hui, qui permet de raccourcir considérablement ces nombres.
La technique de base consiste à convertir le nombre en base 256 et à le convertir en caractères. Vous pouvez le faire en utilisant le code ++NsCMjQ256N
. Vous pouvez ensuite utiliser la chaîne résultante en combinaison avec C
, ce qui fait exactement le contraire (convertir les caractères en int et interpréter le résultat comme un nombre en base 256). Ainsi , vous obtenez 13 caractères: C"2ìÙ½}ü¶d"
. Certains des caractères ne sont pas imprimables.
Mais remarquez que j'ai dit 13 caractères, pas des octets. Si je copie les caractères et les compte avec https://mothereff.in/byte-counter , cela dit 13 caractères et 18 octets. Cela est dû au codage des caractères des caractères, qui est UTF-8 par défaut. Et UTF-8 n'autorise que 2 ^ 7 caractères 1 octet différents. Chaque omble chevalier c
avec ord(c) > 127
obtient effectivement stockée à l' aide de deux octets au lieu d'un.
Et voici la nouvelle fonctionnalité de @ isaacg en jeu. Il a changé le format de code par défaut d'UTF-8 en iso-8859-1. l'iso-8859 peut représenter 256 caractères avec seulement 1 octet. Alors maintenant, vous pouvez réellement atteindre 13 octets. Cependant, cela n'est possible qu'avec le compilateur standard , cela ne fonctionne pas dans le compilateur en ligne.
D' abord , vous voulez convertir le nombre en hexadécimal valeurs en utilisant ce script: jdm.[2.Hd"0"jQ256
. Cela vous donne 12 32 ec d9 bd 07 7d fc b6 64
. Copiez ensuite ces numéros dans votre fichier de code à l'aide d'un éditeur hexadécimal (par exemple hexedit pour linux).
Remarquer:
- Évidemment, vous supprimez le
"
à la fin, si la chaîne est la dernière partie du code.
- Cela ne fonctionne que s'il n'y a pas
34
(l'octet 22
) dans la représentation en base 256 de vos nombres, car c'est le caractère "
et mettra fin à la chaîne. Échapper fonctionne cependant ( 5C 22
).
- Btw, lorsque vous ouvrez un fichier avec un éditeur hexadécimal, vous verrez probablement l'octet
0A
ou 0d 0a
à la fin, que vous pouvez supprimer. Cela indique seulement la fin de la ligne.
00
. De plus, l'\
octet5c
peut ou non devoir être échappé avec un autre ``, selon l'octet qui le suit.