Odkąd pierwsza osoba wypisała 5318008 na kalkulatorze, nerdy ukrywały tajne numery wewnątrz komputera i używały ich do negocjowania tajnych uścisków dłoni pomiędzy aplikacjami i plikami. Dzisiaj rzucimy okiem na niektóre z bardziej zabawnych przykładów.
Większość języków programowania używa 32-bitowego typu całkowitego do reprezentowania pewnych typów danych za kulisami - wewnętrznie liczba jest przechowywana w pamięci RAM lub używana przez CPU jako 32 zer i jedynek, ale w kodzie źródłowym byłaby zapisana albo w zwykły format dziesiętny lub w formacie szesnastkowym, który używa cyfr od 0 do 9 i liter od A do F.
Gdy system operacyjny lub aplikacja chce określić typ pliku, może on odszukać na początku pliku specjalny znacznik, który oznacza typ pliku. Na przykład plik PDF może zaczynać się od wartości szesnastkowej 0x255044462D312E33, która jest równa "% PDF-1.3" w formacie ASCII, lub plik ZIP zaczyna się od 0x504B, co równa się "PK", która pochodzi z oryginalnego narzędzia PKZip. Patrząc na ten "podpis", typ pliku można łatwo zidentyfikować, nawet bez żadnych innych metadanych.
Skompilowane pliki klas Java zaczynają się od CAFEBABENarzędzie "plik" Linuxa może być używane z terminala do określenia typu pliku - w rzeczywistości odczytuje magiczne liczby z pliku o nazwie "magia".
Gdy aplikacja chce wywołać funkcję, może przekazywać wartości do tej funkcji przy użyciu standardowych typów, takich jak liczba całkowita, które mogą być wyrażone w kodzie źródłowym w formacie szesnastkowym. Dotyczy to w szczególności stałych, które są identyfikatorami zdefiniowanymi za pomocą nazw czytelnych dla człowieka, takich jak AUTOSAVE_INTERVAL, ale mapują one do rzeczywistych wartości całkowitych (lub innego typu). Zamiast więc programista wypisuje wartość taką jak 60 za każdym razem, gdy wywoła funkcję w kodzie źródłowym, mogliby użyć stałej AUTOSAVE_INTERVAL dla lepszej czytelności. (Stałe są zwykle łatwo rozpoznawane, ponieważ są napisane dużymi literami).
Wszystkie te przykłady mogą należeć do terminu Magiczne liczby, ponieważ mogą wymagać określonej liczby szesnastkowej, aby funkcja lub typ pliku działał prawidłowo ... jeśli wartość nie jest prawidłowa, nie będzie działać. A kiedy programista chce się trochę zabawić, może zdefiniować te wartości za pomocą liczb szesnastkowych, które opisują coś po angielsku, znanego też jako hexspeak.
Jeśli spojrzysz szybko na kod źródłowy Linuksa, zobaczysz, że wywołanie systemowe _reboot () w systemie Linux wymaga podania "magicznej" zmiennej, która jest równa liczbie szesnastkowej 0xfee1dead. Jeśli coś próbowało wywołać tę funkcję, nie przekazując najpierw tej wartości magicznej, po prostu zwróciłoby błąd.
Identyfikator GUID (globalnie unikalny identyfikator) dla partycji rozruchowej systemu BIOS w schemacie partycjonowania GPT to 21686148-6449-6E6F-744E-656564454649, który tworzy ciąg znaków ASCII "Hah! IdontNeedEFI", co jest aluzją do faktu, że GPT byłby normalnie używany w komputerach, które zastąpiły BIOS z UEFI, ale niekoniecznie muszą.
Microsoft słynne ukrywał 0x0B00B135 w swojej wirtualnej maszynie Hyper-V obsługującej kod źródłowy przesłany do systemu Linux, następnie zmienił wartość na 0xB16B00B5 i ostatecznie zamienił ją na dziesiętną, zanim została całkowicie usunięta z kodu źródłowego.
Więcej zabawnych przykładów to:
Oczywiście nie są to jedyne, ale tylko krótka lista przykładów, które wydawały się zabawne. Wiesz więcej? Powiedz nam w komentarzach.
Możesz zobaczyć więcej przykładów, otwierając edytor heksadecymalny, a następnie otwierając dowolną liczbę typów plików. Istnieje wiele darmowych edytorów szesnastkowych dostępnych dla systemów Windows, OS X lub Linux - po prostu upewnij się, że instalujesz oprogramowanie freeware, aby nie zarazić się crapware lub spyware.
Jako dodatkowy przykład, obrazy odzyskiwania dla telefonów z Androidem, takie jak ClockworkMod, zaczynają się od "ANDROID!", Jeśli są czytane w formacie ASCII.
Uwaga: nie zmieniaj niczego, gdy się rozglądasz. Redaktorzy heksadecy mogą łamać rzeczy!