Skip to main content

Jak utworzyć szesnastkowy plik lub ciąg tekstowy

Kurs C++ odc. 7: Pliki tekstowe. Zapis i odczyt z pliku tekstowego (Kwiecień 2025)

Kurs C++ odc. 7: Pliki tekstowe. Zapis i odczyt z pliku tekstowego (Kwiecień 2025)
Anonim

Wprowadzenie

Zrzut szesnastkowy to szesnastkowy widok danych. Podczas debugowania programu lub inżynierii wstecznej możesz chcieć użyć szesnastkowego.

Na przykład wiele formatów plików ma określone znaki szesnastkowe, aby wskazać ich typ. Jeśli próbujesz odczytać plik za pomocą programu i z jakiegoś powodu nie ładuje się poprawnie, może to oznaczać, że plik nie ma oczekiwanego formatu.

Jeśli chcesz zobaczyć, jak działa program i nie masz kodu źródłowego lub oprogramowania, które kodują inżynierowie kodu, możesz spojrzeć na zrzut heksadecymalny, aby sprawdzić, co się dzieje.

Co to jest szesnastkowy?

Komputery myślą w systemie binarnym. Do każdego znaku, numeru i symbolu odwołują się binarne lub wielokrotne wartości binarne.

Istoty ludzkie mają jednak tendencję do myślenia dziesiętnego.

TysiąceSetkiKilkadziesiątJednostki
1011

Jako ludzie, nasze najniższe liczby są nazywane jednostkami i reprezentują liczby od 0 do 9. Kiedy dochodzimy do 10, resetujemy kolumnę jednostek z powrotem do 0 i dodajemy 1 do kolumny dziesiątek (10).

1286432168421
10010001

W binarnym, najniższa liczba reprezentuje tylko 0 i 1. Gdy przejdziemy obok 1, wstawiamy 1 w kolumnie 2 i 0 w 1 kolumnie. Jeśli chcesz reprezentować 4, umieść 1 w kolumnie 4 i zresetuj kolumnę 2 i 1.

W związku z tym do reprezentowania 15 masz 1111, co oznacza 1 osiem, 1 cztery, 1 dwa i 1 jeden. (8 + 4 + 2 + 1 = 15).

Gdybyśmy oglądali plik danych w formacie binarnym, byłoby to absolutnie ogromne i praktycznie niemożliwe do zrozumienia.

Następnym krokiem z binarnego jest ósemkowy, który używa 8 jako liczby bazowej.

241681
0110

W układzie ósemkowym pierwsza kolumna ma wartość od 0 do 7, druga kolumna to 8 do 15, trzecia kolumna 16 do 23 i czwarta kolumna 24 do 31 i tak dalej. Choć ogólnie łatwiej czytać niż binarny, większość ludzi woli używać heksadecymalnych.

Szesnastkowy używa liczby 16 jako liczby bazowej. Teraz jest to miejsce, w którym robi się zagmatwane, ponieważ jako ludzie myślimy o liczbach od 0 do 9.

Więc, co jest używane dla 10, 11, 12, 13, 14, 15? Odpowiedź to litery.

  • 0 = 0
  • 1 = 1
  • 2 = 2
  • 3 = 3
  • 4 = 4
  • 5 = 5
  • 6 = 6
  • 7 = 7
  • 8 = 8
  • 9 = 9
  • 10 = A
  • 11 = B
  • 12 = C
  • 13 = D
  • 14 = E
  • 15 = F

Wartość 100 jest zatem reprezentowana przez 64. Będziesz potrzebował 6 z kolumny 16s, która wywołuje 96, a następnie 4 w kolumnie jednostek, co daje 100.

Wszystkie znaki w pliku będą oznaczone wartością szesnastkową. Znaczenie tych wartości zależy od formatu samego pliku. Format pliku jest oznaczony wartościami szesnastkowymi, które są zwykle przechowywane na początku pliku.

Dzięki znajomości sekwencji wartości szesnastkowych, które pojawiają się na początku plików, możesz ręcznie określić, w jakim formacie znajduje się plik. Wyświetlanie pliku w zrzutach heksadecymalnych może pomóc Ci znaleźć ukryte znaki, które nie są wyświetlane, gdy plik jest ładowane do normalnego edytora tekstu.

Jak utworzyć zrzut Hex za pomocą Linux

Aby utworzyć zrzut heksadecymalny za pomocą systemu Linux, użyj polecenia hexdump.

Aby wyświetlić plik jako szesnastkowy na terminalu (standardowe wyjście), uruchom następujące polecenie:

nazwa pliku heksdump

Na przykład

hexdump image.png

Domyślne wyjście wyświetli numer linii (w formacie szesnastkowym), a następnie 8 zestawów 4 wartości szesnastkowych na linię.

Na przykład:

00000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244

Możesz dostarczyć różne przełączniki, aby zmienić domyślne wyjście. Na przykład określenie przełącznika minus b spowoduje 8-cyfrowy offset, a następnie 16 trzech kolumn, wypełnionych zero, bajtów danych wejściowych w formacie ósemkowym.

hexdump -b image.png

Dlatego powyższy przykład będzie teraz reprezentowany w następujący sposób:

00000000 211 120 116 107 015 012 032 012 000 000 000 015 111 110 104 122

Powyższy format jest znany jako jednobajtowy widok ósemkowy.

Innym sposobem wyświetlenia pliku jest wyświetlanie znaków jednobajtowych za pomocą przełącznika minus c.

hexdump -c image.png

To ponownie wyświetla przesunięcie, ale tym razem następuje szesnaście oddzielonych spacjami, trzy kolumny, wypełnione spacjami znaki danych wejściowych na linię.

Inne opcje to Canonical hex + ascii display, który można wyświetlić za pomocą przełącznika minus C i dwubajtowego ekranu dziesiętnego, który można wyświetlić za pomocą przełącznika minus d. Przełącznik minus o może służyć do wyświetlania dwu-bajtowego ekranu ósemkowego. Na końcu przełącznik minux x może służyć do wyświetlania dwubajtowego wyświetlacza szesnastkowego.

hexdump -C image.png

hexdump -d image.png

hexdump -o image.png

hexdump -x image.png

Jeśli żaden z powyższych formatów nie odpowiada Twoim potrzebom, użyj przełącznika minus e, aby określić format.

Jeśli wiesz, że plik danych jest bardzo długi i chcesz zobaczyć tylko kilka pierwszych znaków określających jego typ, możesz użyć przełącznika -n, aby określić, ile pliku ma wyświetlać w hex.

hexdump -n100 image.png

Powyższe polecenie wyświetla pierwsze sto bajtów.

Jeśli chcesz pominąć część pliku, możesz użyć przełącznika minus s, aby ustawić przesunięcie do rozpoczęcia.

hexdump -s10 image.png

Jeśli nie podasz nazwy pliku, tekst zostanie odczytany ze standardowego wejścia.

Po prostu wpisz następujące polecenie:

hexdump

Następnie wprowadź tekst do standardowego wejścia i zakończ, wpisując polecenie quit. Hex zostanie wyświetlony na standardowym wyjściu.

streszczenie

Narzędzie hexdump jest oczywiście dość potężnym narzędziem i powinieneś zdecydowanie przeczytać stronę podręcznika, aby w pełni poradzić sobie z wszystkimi funkcjami.

Potrzebne jest również dobre zrozumienie tego, czego szukasz podczas czytania wyników.

Aby wyświetlić stronę podręcznika, uruchom następujące polecenie:

heksdump człowieka