Ідеальний термін для цього питання. Сьогодні @isaacg додав нову функцію, яка дозволяє дуже скоротити такі числа.
Основна методика - перетворити число на базу 256 і перетворити його на символи. Це можна зробити за допомогою коду ++NsCMjQ256N
. Потім можна використовувати отриманий рядок у поєднанні з C
, що робить прямо протилежне (конвертувати символи в int та інтерпретувати результат як число базового 256). Таким чином , ви отримуєте 13 символів: C"2ìÙ½}ü¶d"
. Деякі символи недруковані.
Але зауважте, що я сказав 13 ЧАРКІВ, а не байтів. Якщо я скопіював символи і порахував https://mothereff.in/byte-counter , він говорить про 13 символів і 18 байт. Це обумовлено кодуванням символів символів, яке за замовчуванням є UTF-8. І UTF-8 дозволяє лише 2 ^ 7 різних 1-байтових символів. Кожен char c
із ord(c) > 127
фактично зберігається, використовуючи два байти замість одного.
І ось тут з'явилася нова функція @ isaacg . Він змінив формат коду за замовчуванням з UTF-8 на iso-8859-1. iso-8859 може представляти 256 символів із лише 1 байтом. Тож тепер ви можете фактично досягти 13 БЮТІВ. Це можливо лише у стандартному компіляторі, але це не працює в онлайн-компіляторі.
Спочатку ви хочете , щоб перетворити число в шістнадцяткові значення за допомогою цього скрипта: jdm.[2.Hd"0"jQ256
. Це дає вам 12 32 ec d9 bd 07 7d fc b6 64
. Потім скопіюйте ці номери у свій кодовий файл за допомогою шестигранного редактора (наприклад, hexedit для linux).
Зверніть увагу:
- Очевидно, ви видаляєте
"
в кінці, якщо рядок є останньою частиною коду.
- Це працює лише в тому випадку, якщо в представленні базових-256 ваших чисел немає
34
(байт 22
), оскільки це "
символ і закінчить рядок. Утеча працює, хоча ( 5C 22
).
- До речі, коли ви відкриєте файл із шестигранним редактором, ви, ймовірно, побачите байт
0A
або 0d 0a
в кінці, який ви можете видалити. Це вказує лише на кінець рядка.