Idealny czas na to pytanie. @isaacg właśnie dodał dziś nową funkcję, która pozwala znacznie skrócić takie liczby.
Podstawową techniką jest konwersja liczby na bazę 256 i konwersja na znaki. Możesz to zrobić za pomocą kodu ++NsCMjQ256N
. Następnie możesz użyć wynikowego łańcucha w połączeniu z C
, co robi dokładnie odwrotnie (konwertuje znaki na int i interpretuje wynik jako liczbę podstawową-256). Więc masz 13 znaków: C"2ìÙ½}ü¶d"
. Niektórych znaków nie można wydrukować.
Ale zauważ, że powiedziałem 13 znaków, nie bajtów. Jeśli skopiuję znaki i policzę za pomocą https://mothereff.in/byte-counter , powie 13 znaków i 18 bajtów. Wynika to z kodowania znaków znaków, którym jest domyślnie UTF-8. A UTF-8 dopuszcza tylko 2 ^ 7 różnych znaków 1-bajtowych. Każdy znak c
z ord(c) > 127
faktycznie jest zapisywany przy użyciu dwóch bajtów zamiast jednego.
A oto nowa funkcja @ isaacg do gry. Zmienił domyślny format kodu z UTF-8 na iso-8859-1. iso-8859 może reprezentować 256 znaków z tylko 1 bajtem. Teraz możesz teraz osiągnąć 13 BYTES. Jest to możliwe tylko w przypadku standardowego kompilatora, ale to nie działa w kompilatorze online.
Pierwszy chcesz przekonwertować numer HEX-wartości za pomocą tego skryptu: jdm.[2.Hd"0"jQ256
. To daje ci 12 32 ec d9 bd 07 7d fc b6 64
. Następnie skopiuj te liczby do pliku kodu za pomocą edytora szesnastkowego (np. Hexedit dla systemu Linux).
Ogłoszenie:
- Oczywiście usuwasz
"
na końcu, jeśli ciąg znaków jest ostatnią częścią kodu.
- Działa to tylko wtedy, gdy nie ma
34
(bajtu 22
) reprezentacji liczb podstawowych w 256, ponieważ jest to "
znak char i zakończy ciąg. Funkcja Escaping działa ( 5C 22
).
- Przy okazji, po otwarciu pliku w edytorze szesnastkowym prawdopodobnie zobaczysz bajt
0A
lub 0d 0a
na końcu, który możesz usunąć. To tylko wskazuje koniec linii.
00
. Ponadto\
bajt5c
może być lub nie musi być poprzedzony innym znakiem ``, w zależności od bajtu po nim.