{"id":1575,"date":"2026-05-15T15:10:21","date_gmt":"2026-05-15T13:10:21","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1575"},"modified":"2026-05-15T15:10:22","modified_gmt":"2026-05-15T13:10:22","slug":"system-szesnastkowy-na-dziesietny","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/05\/15\/system-szesnastkowy-na-dziesietny\/","title":{"rendered":"System szesnastkowy na dziesi\u0119tny"},"content":{"rendered":"\n<p>Liczby zapisane w r\u00f3\u017cnych systemach pozycyjnych pojawiaj\u0105 si\u0119 praktycznie wsz\u0119dzie tam, gdzie dzia\u0142a elektronika, pami\u0119\u0107 komputera, adresowanie danych albo programowanie niskopoziomowe. Programista widzi je w debugerze, administrator w adresach pami\u0119ci, a osoba analizuj\u0105ca plik binarny w surowym zapisie bajt\u00f3w. <a href=\"https:\/\/trzykody.pl\/index.php\/2026\/02\/19\/system-szesnastkowy-podstawowe-pojecia-i-zastosowania-w-informatyce\/\">System szesnastkowy<\/a> pozwala skr\u00f3ci\u0107 d\u0142ugie ci\u0105gi bit\u00f3w do bardziej czytelnej postaci i w\u0142a\u015bnie dlatego sta\u0142 si\u0119 standardem w informatyce. W praktyce bardzo cz\u0119sto trzeba wykona\u0107 konwersj\u0119 typu system szesnastkowy na <a href=\"https:\/\/trzykody.pl\/index.php\/2026\/05\/15\/system-dziesiatkowy\/\">system dziesi\u0119tny<\/a> i poprawnie interpretowa\u0107 warto\u015b\u0107 liczbow\u0105 danych zapisanych w pami\u0119ci.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis Tre\u015bci<\/h2><nav><ol><li><a href=\"#dlaczego-system-szesnastkowy-jest-wygodniejszy-od-binarnego-podczas-pracy-z-pamiecia-i-danymi-komputerowymi\">Dlaczego system szesnastkowy jest wygodniejszy od binarnego podczas pracy z pami\u0119ci\u0105 i danymi komputerowymi<\/a><\/li><li><a href=\"#system-szesnastkowy-na-dziesietny-podczas-recznego-przeliczania-wartosci-krok-po-kroku\">System szesnastkowy na dziesi\u0119tny podczas r\u0119cznego przeliczania warto\u015bci krok po kroku<\/a><\/li><li><a href=\"#znaczenie-poteg-liczby-16-i-zaleznosci-miedzy-systemem-binarnym-oraz-heksadecymalnym\">Znaczenie pot\u0119g liczby 16 i zale\u017cno\u015bci mi\u0119dzy systemem binarnym oraz heksadecymalnym<\/a><\/li><li><a href=\"#system-szesnastkowy-na-dziesietny-w-programowaniu-oraz-podczas-pracy-z-pamiecia-operacyjna\">System szesnastkowy na dziesi\u0119tny w programowaniu oraz podczas pracy z pami\u0119ci\u0105 operacyjn\u0105<\/a><\/li><li><a href=\"#najczestsze-bledy-podczas-konwersji-liczb-heksadecymalnych-oraz-problemy-pojawiajace-sie-przy-duzych-wartosciach\">Najcz\u0119stsze b\u0142\u0119dy podczas konwersji liczb heksadecymalnych oraz problemy pojawiaj\u0105ce si\u0119 przy du\u017cych warto\u015bciach<\/a><\/li><li><a href=\"#gdzie-konwersja-liczb-szesnastkowych-pojawia-sie-realnie-w-systemach-operacyjnych-sieciach-i-elektronice\">Gdzie konwersja liczb szesnastkowych pojawia si\u0119 realnie w systemach operacyjnych, sieciach i elektronice<\/a><\/li><li><a href=\"#faq-dotyczace-konwersji-liczb-szesnastkowych-i-interpretacji-zapisu-heksadecymalnego\">FAQ dotycz\u0105ce konwersji liczb szesnastkowych i interpretacji zapisu heksadecymalnego<\/a><ol><li><a href=\"#czy-liczba-hex-zawsze-zaczyna-sie-od-0-x\">Czy liczba hex zawsze zaczyna si\u0119 od 0x<\/a><\/li><li><a href=\"#dlaczego-system-szesnastkowy-ma-akurat-16-znakow\">Dlaczego system szesnastkowy ma akurat 16 znak\u00f3w<\/a><\/li><li><a href=\"#czy-mozna-konwertowac-bardzo-duze-liczby-hex-recznie\">Czy mo\u017cna konwertowa\u0107 bardzo du\u017ce liczby hex r\u0119cznie<\/a><\/li><li><a href=\"#dlaczego-programisci-wola-hex-zamiast-binarnego\">Dlaczego programi\u015bci wol\u0105 hex zamiast binarnego<\/a><\/li><li><a href=\"#czy-zapis-dziesietny-jest-dokladniejszy-od-hex\">Czy zapis dziesi\u0119tny jest dok\u0142adniejszy od hex<\/a><\/li><li><a href=\"#czy-kazda-liczbe-dziesietna-mozna-zapisac-hex\">Czy ka\u017cd\u0105 liczb\u0119 dziesi\u0119tn\u0105 mo\u017cna zapisa\u0107 hex<\/a><\/li><li><a href=\"#dlaczego-w-assemblerze-i-debuggerach-wszedzie-widac-hex\">Dlaczego w assemblerze i debuggerach wsz\u0119dzie wida\u0107 hex<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dlaczego-system-szesnastkowy-jest-wygodniejszy-od-binarnego-podczas-pracy-z-pamiecia-i-danymi-komputerowymi\">Dlaczego system szesnastkowy jest wygodniejszy od binarnego podczas pracy z pami\u0119ci\u0105 i danymi komputerowymi<\/h2>\n\n\n\n<p>System dziesi\u0119tny dzia\u0142a na podstawie 10 cyfr: od 0 do 9. Cz\u0142owiek u\u017cywa go naturalnie, bo liczenie historycznie oparto o liczb\u0119 palc\u00f3w d\u0142oni. Komputery dzia\u0142aj\u0105 jednak binarnie, czyli wykorzystuj\u0105 dwa stany: 0 oraz 1.<\/p>\n\n\n\n<p>Problem pojawia si\u0119 wtedy, gdy liczby binarne staj\u0105 si\u0119 bardzo d\u0142ugie. Przyk\u0142adowo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zapis<\/th><th>Warto\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>11111111<\/td><td>255<\/td><\/tr><tr><td>1111111111111111<\/td><td>65535<\/td><\/tr><tr><td>11111111111111111111111111111111<\/td><td>4294967295<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Odczytywanie takich warto\u015bci jest niewygodne i \u0142atwo pope\u0142ni\u0107 b\u0142\u0105d. Dlatego wprowadzono zapis szesnastkowy.<\/p>\n\n\n\n<p>System szesnastkowy korzysta z podstawy 16. Oznacza to, \u017ce jedna pozycja mo\u017ce przyj\u0105\u0107 16 warto\u015bci:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Dziesi\u0119tnie<\/th><th>Hex<\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>0<\/td><\/tr><tr><td>1<\/td><td>1<\/td><\/tr><tr><td>2<\/td><td>2<\/td><\/tr><tr><td>3<\/td><td>3<\/td><\/tr><tr><td>4<\/td><td>4<\/td><\/tr><tr><td>5<\/td><td>5<\/td><\/tr><tr><td>6<\/td><td>6<\/td><\/tr><tr><td>7<\/td><td>7<\/td><\/tr><tr><td>8<\/td><td>8<\/td><\/tr><tr><td>9<\/td><td>9<\/td><\/tr><tr><td>10<\/td><td>A<\/td><\/tr><tr><td>11<\/td><td>B<\/td><\/tr><tr><td>12<\/td><td>C<\/td><\/tr><tr><td>13<\/td><td>D<\/td><\/tr><tr><td>14<\/td><td>E<\/td><\/tr><tr><td>15<\/td><td>F<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ka\u017cda cyfra hex odpowiada dok\u0142adnie 4 bitom. To kluczowa zale\u017cno\u015b\u0107.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Binarnie<\/th><th>Hex<\/th><\/tr><\/thead><tbody><tr><td>0000<\/td><td>0<\/td><\/tr><tr><td>0001<\/td><td>1<\/td><\/tr><tr><td>0010<\/td><td>2<\/td><\/tr><tr><td>0011<\/td><td>3<\/td><\/tr><tr><td>0100<\/td><td>4<\/td><\/tr><tr><td>0101<\/td><td>5<\/td><\/tr><tr><td>0110<\/td><td>6<\/td><\/tr><tr><td>0111<\/td><td>7<\/td><\/tr><tr><td>1000<\/td><td>8<\/td><\/tr><tr><td>1001<\/td><td>9<\/td><\/tr><tr><td>1010<\/td><td>A<\/td><\/tr><tr><td>1011<\/td><td>B<\/td><\/tr><tr><td>1100<\/td><td>C<\/td><\/tr><tr><td>1101<\/td><td>D<\/td><\/tr><tr><td>1110<\/td><td>E<\/td><\/tr><tr><td>1111<\/td><td>F<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dzi\u0119ki temu liczba:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Binarnie<\/th><th>Hex<\/th><\/tr><\/thead><tbody><tr><td>11111111<\/td><td>FF<\/td><\/tr><tr><td>10101010<\/td><td>AA<\/td><\/tr><tr><td>11001100<\/td><td>CC<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W praktyce debugowanie pami\u0119ci z u\u017cyciem hex jest wielokrotnie prostsze ni\u017c analiza binarna. Wystarczy spojrze\u0107 na zrzut pami\u0119ci w debuggerze, \u017ceby zobaczy\u0107 adresy typu:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Adres<\/th><\/tr><\/thead><tbody><tr><td>0x7FFE12A0<\/td><\/tr><tr><td>0x0040FFAA<\/td><\/tr><tr><td>0xDEADBEEF<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Taki zapis jest kr\u00f3tszy, czytelniejszy i \u0142atwiejszy do grupowania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"system-szesnastkowy-na-dziesietny-podczas-recznego-przeliczania-wartosci-krok-po-kroku\">System szesnastkowy na dziesi\u0119tny podczas r\u0119cznego przeliczania warto\u015bci krok po kroku<\/h2>\n\n\n\n<p>Konwersja polega na wykorzystaniu pot\u0119g liczby 16.<\/p>\n\n\n\n<p>Ka\u017cda pozycja liczby ma swoj\u0105 wag\u0119:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Pozycja<\/th><th>Waga<\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>16\u2070<\/td><\/tr><tr><td>1<\/td><td>16\u00b9<\/td><\/tr><tr><td>2<\/td><td>16\u00b2<\/td><\/tr><tr><td>3<\/td><td>16\u00b3<\/td><\/tr><tr><td>4<\/td><td>16\u2074<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przyk\u0142ad liczby:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><th>Pozycja<\/th><\/tr><\/thead><tbody><tr><td>2<\/td><td>2<\/td><\/tr><tr><td>A<\/td><td>1<\/td><\/tr><tr><td>3<\/td><td>0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Liczba to:<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mn>2<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>2<\/mn><\/msup><mo>+<\/mo><mn>10<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>1<\/mn><\/msup><mo>+<\/mo><mn>3<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>0<\/mn><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">2\\cdot16^2+10\\cdot16^1+3\\cdot16^0<\/annotation><\/semantics><\/math>2\u22c5162+10\u22c5161+3\u22c5160<\/p>\n\n\n\n<p>Rozpisanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Element<\/th><th>Obliczenie<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>2 \u00d7 16\u00b2<\/td><td>2 \u00d7 256<\/td><td>512<\/td><\/tr><tr><td>A \u00d7 16\u00b9<\/td><td>10 \u00d7 16<\/td><td>160<\/td><\/tr><tr><td>3 \u00d7 16\u2070<\/td><td>3 \u00d7 1<\/td><td>3<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Suma:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>675<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Czyli:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><th>Dziesi\u0119tnie<\/th><\/tr><\/thead><tbody><tr><td>2A3<\/td><td>675<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Bardzo cz\u0119sty b\u0142\u0105d polega na czytaniu liczby od lewej strony bez uwzgl\u0119dnienia wag pozycji. W systemach pozycyjnych pozycja cyfry ma znaczenie wi\u0119ksze ni\u017c sama warto\u015b\u0107 cyfry.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><th>B\u0142\u0119dne rozumowanie<\/th><th>Poprawna warto\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>FF<\/td><td>15 + 15<\/td><td>255<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Poprawne obliczenie:<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mn>15<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>1<\/mn><\/msup><mo>+<\/mo><mn>15<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>0<\/mn><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">15\\cdot16^1+15\\cdot16^0<\/annotation><\/semantics><\/math>15\u22c5161+15\u22c5160<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Element<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>15 \u00d7 16<\/td><td>240<\/td><\/tr><tr><td>15 \u00d7 1<\/td><td>15<\/td><\/tr><tr><td>Suma<\/td><td>255<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przy wi\u0119kszych liczbach wida\u0107 wyra\u017anie, dlaczego pot\u0119gi s\u0105 istotne.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><th>Pozycje<\/th><\/tr><\/thead><tbody><tr><td>1F4<\/td><td>2,1,0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Obliczenia:<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mn>1<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>2<\/mn><\/msup><mo>+<\/mo><mn>15<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>1<\/mn><\/msup><mo>+<\/mo><mn>4<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>0<\/mn><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">1\\cdot16^2+15\\cdot16^1+4\\cdot16^0<\/annotation><\/semantics><\/math>1\u22c5162+15\u22c5161+4\u22c5160<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Sk\u0142adnik<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>1 \u00d7 256<\/td><td>256<\/td><\/tr><tr><td>15 \u00d7 16<\/td><td>240<\/td><\/tr><tr><td>4 \u00d7 1<\/td><td>4<\/td><\/tr><tr><td>Suma<\/td><td>500<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wynik ko\u0144cowy:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><th>Dziesi\u0119tnie<\/th><\/tr><\/thead><tbody><tr><td>1F4<\/td><td>500<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>To w\u0142a\u015bnie dlatego w analizie pami\u0119ci liczba 0xFF oznacza 255, a nie 30.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"znaczenie-poteg-liczby-16-i-zaleznosci-miedzy-systemem-binarnym-oraz-heksadecymalnym\">Znaczenie pot\u0119g liczby 16 i zale\u017cno\u015bci mi\u0119dzy systemem binarnym oraz heksadecymalnym<\/h2>\n\n\n\n<p>System hex nie istnieje samodzielnie. Jest bezpo\u015brednio zwi\u0105zany z binarnym.<\/p>\n\n\n\n<p>Ka\u017cde 4 bity tworz\u0105 jedn\u0105 cyfr\u0119 hex.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Binarnie<\/th><th>Grupowanie<\/th><th>Hex<\/th><\/tr><\/thead><tbody><tr><td>10101111<\/td><td>1010 1111<\/td><td>AF<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Teraz mo\u017cna policzy\u0107 warto\u015b\u0107 dziesi\u0119tn\u0105.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><th>Dziesi\u0119tnie<\/th><\/tr><\/thead><tbody><tr><td>A<\/td><td>10<\/td><\/tr><tr><td>F<\/td><td>15<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Obliczenie:<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mn>10<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>1<\/mn><\/msup><mo>+<\/mo><mn>15<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>0<\/mn><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">10\\cdot16^1+15\\cdot16^0<\/annotation><\/semantics><\/math>10\u22c5161+15\u22c5160<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>175<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Sprawdzenie binarne:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Bit<\/th><th>Warto\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>128<\/td><\/tr><tr><td>0<\/td><td>64<\/td><\/tr><tr><td>1<\/td><td>32<\/td><\/tr><tr><td>0<\/td><td>16<\/td><\/tr><tr><td>1<\/td><td>8<\/td><\/tr><tr><td>1<\/td><td>4<\/td><\/tr><tr><td>1<\/td><td>2<\/td><\/tr><tr><td>1<\/td><td>1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Suma:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>175<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W praktyce oznacza to, \u017ce programista mo\u017ce bardzo szybko przechodzi\u0107 pomi\u0119dzy reprezentacj\u0105 binarn\u0105 a hex bez wykonywania pe\u0142nych oblicze\u0144 dziesi\u0119tnych.<\/p>\n\n\n\n<p>W architekturze komputer\u00f3w jest to ogromna oszcz\u0119dno\u015b\u0107 czasu. Adres:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><\/tr><\/thead><tbody><tr><td>0xFFFFFFFF<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>to po prostu:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Binarnie<\/th><\/tr><\/thead><tbody><tr><td>11111111111111111111111111111111<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>czyli maksymalna warto\u015b\u0107 32-bitowa bez znaku:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Dziesi\u0119tnie<\/th><\/tr><\/thead><tbody><tr><td>4294967295<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Takie liczby pojawiaj\u0105 si\u0119 stale przy pracy z:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wska\u017anikami pami\u0119ci,<\/li>\n\n\n\n<li>adresami procesora,<\/li>\n\n\n\n<li>rejestrami CPU,<\/li>\n\n\n\n<li>analiz\u0105 pakiet\u00f3w sieciowych,<\/li>\n\n\n\n<li>kolorami RGB,<\/li>\n\n\n\n<li>kodowaniem znak\u00f3w,<\/li>\n\n\n\n<li>assemblerem,<\/li>\n\n\n\n<li>sterownikami urz\u0105dze\u0144.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"system-szesnastkowy-na-dziesietny-w-programowaniu-oraz-podczas-pracy-z-pamiecia-operacyjna\">System szesnastkowy na dziesi\u0119tny w programowaniu oraz podczas pracy z pami\u0119ci\u0105 operacyjn\u0105<\/h2>\n\n\n\n<p>W wi\u0119kszo\u015bci j\u0119zyk\u00f3w programowania liczby hex zapisuje si\u0119 z prefiksem <code>0x<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td>0xFF<\/td><\/tr><tr><td>C++<\/td><td>0x1A<\/td><\/tr><tr><td>Python<\/td><td>0xABC<\/td><\/tr><tr><td>PHP<\/td><td>0x10<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Program wykonuje konwersj\u0119 automatycznie.<\/p>\n\n\n\n<p>Tabela przyk\u0142ad\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>printf(\"%d\", 0xFF);<\/code><\/td><\/tr><tr><td>C++<\/td><td><code>cout &lt;&lt; 0xFF;<\/code><\/td><\/tr><tr><td>Python<\/td><td><code>print(0xFF)<\/code><\/td><\/tr><tr><td>PHP<\/td><td><code>echo 0xFF;<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Warto\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>255<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Konwersja r\u0119czna w Pythonie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>x = \"2A\"<\/code><\/td><\/tr><tr><td><code>print(int(x, 16))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>42<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przyk\u0142ad w C:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>#include &lt;stdio.h&gt;<\/code><\/td><\/tr><tr><td><code>int main()<\/code><\/td><\/tr><tr><td><code>{<\/code><\/td><\/tr><tr><td><code>int x = 0x2A;<\/code><\/td><\/tr><tr><td><code>printf(\"%d\\n\", x);<\/code><\/td><\/tr><tr><td><code>return 0;<\/code><\/td><\/tr><tr><td><code>}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>42<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przyk\u0142ad w C++:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>#include &lt;iostream&gt;<\/code><\/td><\/tr><tr><td><code>using namespace std;<\/code><\/td><\/tr><tr><td><code>int main()<\/code><\/td><\/tr><tr><td><code>{<\/code><\/td><\/tr><tr><td><code>int x = 0x2A;<\/code><\/td><\/tr><tr><td><code>cout &lt;&lt; x &lt;&lt; endl;<\/code><\/td><\/tr><tr><td><code>}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Przyk\u0142ad w PHP:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>&lt;?php<\/code><\/td><\/tr><tr><td><code>$x = hexdec(\"2A\");<\/code><\/td><\/tr><tr><td><code>echo $x;<\/code><\/td><\/tr><tr><td><code>?&gt;<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W praktyce problem pojawia si\u0119 wtedy, gdy kto\u015b nie rozumie r\u00f3\u017cnicy mi\u0119dzy reprezentacj\u0105 a warto\u015bci\u0105.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zapis<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td>255<\/td><td>liczba dziesi\u0119tna<\/td><\/tr><tr><td>0xFF<\/td><td>ta sama liczba w hex<\/td><\/tr><tr><td>11111111<\/td><td>ta sama liczba binarnie<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>To nie s\u0105 trzy r\u00f3\u017cne liczby. To trzy sposoby zapisu tej samej warto\u015bci.<\/p>\n\n\n\n<p>W analizie b\u0142\u0119d\u00f3w program\u00f3w takie nieporozumienie potrafi kosztowa\u0107 wiele godzin. Szczeg\u00f3lnie przy pracy z pami\u0119ci\u0105 lub protoko\u0142ami sieciowymi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"najczestsze-bledy-podczas-konwersji-liczb-heksadecymalnych-oraz-problemy-pojawiajace-sie-przy-duzych-wartosciach\">Najcz\u0119stsze b\u0142\u0119dy podczas konwersji liczb heksadecymalnych oraz problemy pojawiaj\u0105ce si\u0119 przy du\u017cych warto\u015bciach<\/h2>\n\n\n\n<p>Pierwszy problem to b\u0142\u0119dne interpretowanie liter.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Litera<\/th><th>Warto\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>A<\/td><td>10<\/td><\/tr><tr><td>B<\/td><td>11<\/td><\/tr><tr><td>C<\/td><td>12<\/td><\/tr><tr><td>D<\/td><td>13<\/td><\/tr><tr><td>E<\/td><td>14<\/td><\/tr><tr><td>F<\/td><td>15<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Osoby pocz\u0105tkuj\u0105ce cz\u0119sto pr\u00f3buj\u0105 traktowa\u0107 litery jako tekst, a nie cyfry systemu liczbowego.<\/p>\n\n\n\n<p>Drugi problem to pomijanie pozycji.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><th>B\u0142\u0119dny wynik<\/th><\/tr><\/thead><tbody><tr><td>100<\/td><td>100<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Poprawne obliczenie:<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mn>1<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>2<\/mn><\/msup><mo>+<\/mo><mn>0<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>1<\/mn><\/msup><mo>+<\/mo><mn>0<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>0<\/mn><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">1\\cdot16^2+0\\cdot16^1+0\\cdot16^0<\/annotation><\/semantics><\/math>1\u22c5162+0\u22c5161+0\u22c5160<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>256<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Kolejny problem pojawia si\u0119 przy liczbach ujemnych zapisanych w kodzie uzupe\u0142nie\u0144 do dw\u00f3ch.<\/p>\n\n\n\n<p>Przyk\u0142ad 8-bitowy:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hex<\/th><th>Binarnie<\/th><\/tr><\/thead><tbody><tr><td>FF<\/td><td>11111111<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Bez znaku:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Interpretacja<\/th><th>Warto\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>unsigned<\/td><td>255<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ze znakiem:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Interpretacja<\/th><th>Warto\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>signed int8<\/td><td>-1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>To bardzo wa\u017cne w C i C++, gdzie typ danych wp\u0142ywa na interpretacj\u0119 tych samych bit\u00f3w.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>unsigned char a = 0xFF;<\/code><\/td><\/tr><tr><td><code>signed char b = 0xFF;<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Tabela wynik\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zmienna<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>a<\/td><td>255<\/td><\/tr><tr><td>b<\/td><td>-1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>B\u0142\u0119dy tego typu cz\u0119sto prowadz\u0105 do:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>przepe\u0142nie\u0144,<\/li>\n\n\n\n<li>b\u0142\u0119d\u00f3w pami\u0119ci,<\/li>\n\n\n\n<li>niepoprawnych oblicze\u0144,<\/li>\n\n\n\n<li>b\u0142\u0119d\u00f3w sieciowych,<\/li>\n\n\n\n<li>uszkodzenia danych binarnych.<\/li>\n<\/ul>\n\n\n\n<p>Przy analizie protoko\u0142\u00f3w komunikacyjnych jest to szczeg\u00f3lnie niebezpieczne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"gdzie-konwersja-liczb-szesnastkowych-pojawia-sie-realnie-w-systemach-operacyjnych-sieciach-i-elektronice\">Gdzie konwersja liczb szesnastkowych pojawia si\u0119 realnie w systemach operacyjnych, sieciach i elektronice<\/h2>\n\n\n\n<p>Adres MAC:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>MAC<\/th><\/tr><\/thead><tbody><tr><td>00:1A:2B:3C:4D:5E<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ka\u017cda para znak\u00f3w to jeden bajt zapisany hex.<\/p>\n\n\n\n<p>Kolory HTML:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kolor<\/th><th>Hex<\/th><\/tr><\/thead><tbody><tr><td>czerwony<\/td><td>#FF0000<\/td><\/tr><tr><td>zielony<\/td><td>#00FF00<\/td><\/tr><tr><td>niebieski<\/td><td>#0000FF<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Kolor <code>#FFFFFF<\/code>:<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mn>255<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>4<\/mn><\/msup><mo>+<\/mo><mn>255<\/mn><mo>\u22c5<\/mo><msup><mn>16<\/mn><mn>2<\/mn><\/msup><mo>+<\/mo><mn>255<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">255\\cdot16^4+255\\cdot16^2+255<\/annotation><\/semantics><\/math>255\u22c5164+255\u22c5162+255<\/p>\n\n\n\n<p>oznacza maksymaln\u0105 jasno\u015b\u0107 wszystkich kana\u0142\u00f3w RGB.<\/p>\n\n\n\n<p>W debugerach proces\u00f3w mo\u017cna spotka\u0107 adresy:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Adres<\/th><\/tr><\/thead><tbody><tr><td>0x7FF61A20<\/td><\/tr><tr><td>0x00401000<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>W logach systemowych bardzo cz\u0119sto pojawiaj\u0105 si\u0119 kody b\u0142\u0119d\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>0x80070005<\/td><\/tr><tr><td>0xC0000005<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Programista analizuj\u0105cy crash dump musi rozumie\u0107 takie warto\u015bci natychmiast, bez u\u017cywania kalkulatora.<\/p>\n\n\n\n<p>W mikrokontrolerach hex jest praktycznie standardem.<\/p>\n\n\n\n<p>Przyk\u0142ad konfiguracji rejestru:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>PORTB = 0xFF;<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>oznacza ustawienie wszystkich 8 bit\u00f3w portu na 1.<\/p>\n\n\n\n<p>W sieciach komputerowych analiza pakiet\u00f3w w Wiresharku r\u00f3wnie\u017c opiera si\u0119 o zapis szesnastkowy. Jeden b\u0142\u0119dnie odczytany bajt potrafi ca\u0142kowicie zmieni\u0107 interpretacj\u0119 danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq-dotyczace-konwersji-liczb-szesnastkowych-i-interpretacji-zapisu-heksadecymalnego\">FAQ dotycz\u0105ce konwersji liczb szesnastkowych i interpretacji zapisu heksadecymalnego<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-liczba-hex-zawsze-zaczyna-sie-od-0-x\">Czy liczba hex zawsze zaczyna si\u0119 od 0x<\/h3>\n\n\n\n<p>Nie. Prefiks <code>0x<\/code> jest tylko konwencj\u0105 u\u017cywan\u0105 w wielu j\u0119zykach programowania. Sama liczba mo\u017ce by\u0107 zapisana r\u00f3wnie\u017c jako <code>FF<\/code>, <code>2A<\/code> albo <code>ABC123<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-system-szesnastkowy-ma-akurat-16-znakow\">Dlaczego system szesnastkowy ma akurat 16 znak\u00f3w<\/h3>\n\n\n\n<p>Poniewa\u017c 16 jest pot\u0119g\u0105 liczby 2.<\/p>\n\n\n\n<p><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mn>16<\/mn><mo>=<\/mo><msup><mn>2<\/mn><mn>4<\/mn><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">16=2^4<\/annotation><\/semantics><\/math>16=24<\/p>\n\n\n\n<p>Dzi\u0119ki temu jedna cyfra hex odpowiada dok\u0142adnie 4 bitom.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-konwertowac-bardzo-duze-liczby-hex-recznie\">Czy mo\u017cna konwertowa\u0107 bardzo du\u017ce liczby hex r\u0119cznie<\/h3>\n\n\n\n<p>Mo\u017cna, ale staje si\u0119 to niewygodne. Przy liczbach 64-bitowych lub 128-bitowych zwykle u\u017cywa si\u0119 narz\u0119dzi programistycznych albo kalkulator\u00f3w programistycznych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-programisci-wola-hex-zamiast-binarnego\">Dlaczego programi\u015bci wol\u0105 hex zamiast binarnego<\/h3>\n\n\n\n<p>Hex jest du\u017co kr\u00f3tszy i \u0142atwiejszy do odczytu. Jednocze\u015bnie zachowuje bezpo\u015brednie powi\u0105zanie z bitami.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-zapis-dziesietny-jest-dokladniejszy-od-hex\">Czy zapis dziesi\u0119tny jest dok\u0142adniejszy od hex<\/h3>\n\n\n\n<p>Nie. To tylko inna reprezentacja tej samej warto\u015bci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-kazda-liczbe-dziesietna-mozna-zapisac-hex\">Czy ka\u017cd\u0105 liczb\u0119 dziesi\u0119tn\u0105 mo\u017cna zapisa\u0107 hex<\/h3>\n\n\n\n<p>Tak. Ka\u017cd\u0105 liczb\u0119 ca\u0142kowit\u0105 mo\u017cna zapisa\u0107 w dowolnym systemie pozycyjnym.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-w-assemblerze-i-debuggerach-wszedzie-widac-hex\">Dlaczego w assemblerze i debuggerach wsz\u0119dzie wida\u0107 hex<\/h3>\n\n\n\n<p>Poniewa\u017c sprz\u0119t komputerowy operuje na bitach i bajtach. Hex najlepiej odwzorowuje struktur\u0119 pami\u0119ci.<\/p>\n\n\n\n<p>Konwersja mi\u0119dzy systemami liczbowymi jest jedn\u0105 z tych rzeczy, kt\u00f3re pocz\u0105tkowo wygl\u0105daj\u0105 jak szkolne \u0107wiczenie matematyczne, a p\u00f3\u017aniej okazuj\u0105 si\u0119 podstawow\u0105 umiej\u0119tno\u015bci\u0105 przy analizie pami\u0119ci, debugowaniu program\u00f3w i pracy z elektronik\u0105. Bez rozumienia zapisu heksadecymalnego trudno wygodnie pracowa\u0107 z niskopoziomow\u0105 informatyk\u0105, protoko\u0142ami komunikacyjnymi albo architektur\u0105 komputer\u00f3w.<\/p>\n\n\n\n<p><em>\u0179r\u00f3d\u0142o Foto: Freepik<\/em><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Liczby zapisane w r\u00f3\u017cnych systemach pozycyjnych pojawiaj\u0105 si\u0119 praktycznie wsz\u0119dzie tam, gdzie dzia\u0142a elektronika, pami\u0119\u0107 komputera, adresowanie danych albo programowanie niskopoziomowe. Programista widzi je w debugerze, administrator w adresach pami\u0119ci, a osoba analizuj\u0105ca plik binarny w surowym zapisie bajt\u00f3w. System szesnastkowy pozwala skr\u00f3ci\u0107 d\u0142ugie ci\u0105gi bit\u00f3w do bardziej czytelnej postaci i w\u0142a\u015bnie dlatego sta\u0142 si\u0119 standardem w informatyce. W praktyce bardzo cz\u0119sto trzeba wykona\u0107 konwersj\u0119 typu system szesnastkowy na system dziesi\u0119tny i poprawnie interpretowa\u0107 warto\u015b\u0107 liczbow\u0105 danych zapisanych w pami\u0119ci. Dlaczego system szesnastkowy jest wygodniejszy od binarnego podczas pracy z pami\u0119ci\u0105 i danymi komputerowymi System dziesi\u0119tny dzia\u0142a na podstawie 10 cyfr: od 0 do 9. Cz\u0142owiek u\u017cywa go naturalnie, bo liczenie historycznie oparto o liczb\u0119 palc\u00f3w d\u0142oni. Komputery dzia\u0142aj\u0105 jednak binarnie, czyli wykorzystuj\u0105 dwa stany: 0 oraz 1. Problem pojawia si\u0119 wtedy, gdy liczby binarne staj\u0105 si\u0119 bardzo d\u0142ugie. Przyk\u0142adowo: Zapis Warto\u015b\u0107 11111111 255 1111111111111111 65535 11111111111111111111111111111111 4294967295 Odczytywanie takich warto\u015bci jest niewygodne i \u0142atwo pope\u0142ni\u0107 b\u0142\u0105d. Dlatego wprowadzono zapis szesnastkowy. System szesnastkowy korzysta z podstawy 16. Oznacza to, \u017ce jedna pozycja mo\u017ce przyj\u0105\u0107 16 warto\u015bci: Dziesi\u0119tnie Hex 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 Ka\u017cda cyfra hex odpowiada dok\u0142adnie 4 bitom. To kluczowa zale\u017cno\u015b\u0107. Binarnie Hex 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F Dzi\u0119ki temu liczba: Binarnie Hex 11111111 FF 10101010 AA 11001100 CC W praktyce debugowanie pami\u0119ci z u\u017cyciem hex jest wielokrotnie prostsze ni\u017c analiza binarna. Wystarczy spojrze\u0107 na zrzut pami\u0119ci w debuggerze, \u017ceby zobaczy\u0107 adresy typu: Adres 0x7FFE12A0 0x0040FFAA 0xDEADBEEF Taki zapis jest kr\u00f3tszy, czytelniejszy i \u0142atwiejszy do grupowania. System szesnastkowy na dziesi\u0119tny podczas r\u0119cznego przeliczania warto\u015bci krok po kroku Konwersja polega na wykorzystaniu pot\u0119g liczby 16. Ka\u017cda pozycja liczby ma swoj\u0105 wag\u0119: Pozycja Waga 0 16\u2070 1 16\u00b9 2 16\u00b2 3 16\u00b3 4 16\u2074 Przyk\u0142ad liczby: Hex Pozycja 2 2 A 1 3 0 Liczba to: 2\u22c5162+10\u22c5161+3\u22c51602\\cdot16^2+10\\cdot16^1+3\\cdot16^02\u22c5162+10\u22c5161+3\u22c5160 Rozpisanie: Element Obliczenie Wynik 2 \u00d7 16\u00b2 2 \u00d7 256 512 A \u00d7 16\u00b9 10 \u00d7 16 160 3 \u00d7 16\u2070 3 \u00d7 1 3 Suma: Wynik 675 Czyli: Hex Dziesi\u0119tnie 2A3 675 Bardzo cz\u0119sty b\u0142\u0105d polega na czytaniu liczby od lewej strony bez uwzgl\u0119dnienia wag pozycji. W systemach pozycyjnych pozycja cyfry ma znaczenie wi\u0119ksze ni\u017c sama warto\u015b\u0107 cyfry. Przyk\u0142ad: Hex B\u0142\u0119dne rozumowanie Poprawna warto\u015b\u0107 FF 15 + 15 255 Poprawne obliczenie: 15\u22c5161+15\u22c516015\\cdot16^1+15\\cdot16^015\u22c5161+15\u22c5160 Element Wynik 15 \u00d7 16 240 15 \u00d7 1 15 Suma 255 Przy wi\u0119kszych liczbach wida\u0107 wyra\u017anie, dlaczego pot\u0119gi s\u0105 istotne. Przyk\u0142ad: Hex Pozycje 1F4 2,1,0 Obliczenia: 1\u22c5162+15\u22c5161+4\u22c51601\\cdot16^2+15\\cdot16^1+4\\cdot16^01\u22c5162+15\u22c5161+4\u22c5160 Sk\u0142adnik Wynik 1 \u00d7 256 256 15 \u00d7 16 240 4 \u00d7 1 4 Suma 500 Wynik ko\u0144cowy: Hex Dziesi\u0119tnie 1F4 500 To w\u0142a\u015bnie dlatego w analizie pami\u0119ci liczba 0xFF oznacza 255, a nie 30. Znaczenie pot\u0119g liczby 16 i zale\u017cno\u015bci mi\u0119dzy systemem binarnym oraz heksadecymalnym System hex nie istnieje samodzielnie. Jest bezpo\u015brednio zwi\u0105zany z binarnym. Ka\u017cde 4 bity tworz\u0105 jedn\u0105 cyfr\u0119 hex. Przyk\u0142ad: Binarnie Grupowanie Hex 10101111 1010 1111 AF Teraz mo\u017cna policzy\u0107 warto\u015b\u0107 dziesi\u0119tn\u0105. Hex Dziesi\u0119tnie A 10 F 15 Obliczenie: 10\u22c5161+15\u22c516010\\cdot16^1+15\\cdot16^010\u22c5161+15\u22c5160 Wynik 175 Sprawdzenie binarne: Bit Warto\u015b\u0107 1 128 0 64 1 32 0 16 1 8 1 4 1 2 1 1 Suma: Wynik 175 W praktyce oznacza to, \u017ce programista mo\u017ce bardzo szybko przechodzi\u0107 pomi\u0119dzy reprezentacj\u0105 binarn\u0105 a hex bez wykonywania pe\u0142nych oblicze\u0144 dziesi\u0119tnych. W architekturze komputer\u00f3w jest to ogromna oszcz\u0119dno\u015b\u0107 czasu. Adres: Hex 0xFFFFFFFF to po prostu: Binarnie 11111111111111111111111111111111 czyli maksymalna warto\u015b\u0107 32-bitowa bez znaku: Dziesi\u0119tnie 4294967295 Takie liczby pojawiaj\u0105 si\u0119 stale przy pracy z: System szesnastkowy na dziesi\u0119tny w programowaniu oraz podczas pracy z pami\u0119ci\u0105 operacyjn\u0105 W wi\u0119kszo\u015bci j\u0119zyk\u00f3w programowania liczby hex zapisuje si\u0119 z prefiksem 0x. J\u0119zyk Przyk\u0142ad C 0xFF C++ 0x1A Python 0xABC PHP 0x10 Program wykonuje konwersj\u0119 automatycznie. Tabela przyk\u0142ad\u00f3w: J\u0119zyk Kod C printf(&#8222;%d&#8221;, 0xFF); C++ cout &lt;&lt; 0xFF; Python print(0xFF) PHP echo 0xFF; Wynik: Warto\u015b\u0107 255 Konwersja r\u0119czna w Pythonie: Kod x = &#8222;2A&#8221; print(int(x, 16)) Wynik: Wynik 42 Przyk\u0142ad w C: Kod #include &lt;stdio.h&gt; int main() { int x = 0x2A; printf(&#8222;%d\\n&#8221;, x); return 0; } Wynik: Wynik 42 Przyk\u0142ad w C++: Kod #include &lt;iostream&gt; using namespace std; int main() { int x = 0x2A; cout &lt;&lt; x &lt;&lt; endl; } Przyk\u0142ad w PHP: Kod &lt;?php $x = hexdec(&#8222;2A&#8221;); echo $x; ?&gt; W praktyce problem pojawia si\u0119 wtedy, gdy kto\u015b nie rozumie r\u00f3\u017cnicy mi\u0119dzy reprezentacj\u0105 a warto\u015bci\u0105. Przyk\u0142ad: Zapis Znaczenie 255 liczba dziesi\u0119tna 0xFF ta sama liczba w hex 11111111 ta sama liczba binarnie To nie s\u0105 trzy r\u00f3\u017cne liczby. To trzy sposoby zapisu tej samej warto\u015bci. W analizie b\u0142\u0119d\u00f3w program\u00f3w takie nieporozumienie potrafi kosztowa\u0107 wiele godzin. Szczeg\u00f3lnie przy pracy z pami\u0119ci\u0105 lub protoko\u0142ami sieciowymi. Najcz\u0119stsze b\u0142\u0119dy podczas konwersji liczb heksadecymalnych oraz problemy pojawiaj\u0105ce si\u0119 przy du\u017cych warto\u015bciach Pierwszy problem to b\u0142\u0119dne interpretowanie liter. Litera Warto\u015b\u0107 A 10 B 11 C 12 D 13 E 14 F 15 Osoby pocz\u0105tkuj\u0105ce cz\u0119sto pr\u00f3buj\u0105 traktowa\u0107 litery jako tekst, a nie cyfry systemu liczbowego. Drugi problem to pomijanie pozycji. Przyk\u0142ad: Hex B\u0142\u0119dny wynik 100 100 Poprawne obliczenie: 1\u22c5162+0\u22c5161+0\u22c51601\\cdot16^2+0\\cdot16^1+0\\cdot16^01\u22c5162+0\u22c5161+0\u22c5160 Wynik 256 Kolejny problem pojawia si\u0119 przy liczbach ujemnych zapisanych w kodzie uzupe\u0142nie\u0144 do dw\u00f3ch. Przyk\u0142ad 8-bitowy: Hex Binarnie FF 11111111 Bez znaku: Interpretacja Warto\u015b\u0107 unsigned 255 Ze znakiem: Interpretacja Warto\u015b\u0107 signed int8 -1 To bardzo wa\u017cne w C i C++, gdzie typ danych wp\u0142ywa na interpretacj\u0119 tych samych bit\u00f3w. Przyk\u0142ad: Kod unsigned char a = 0xFF; signed char b = 0xFF; Tabela wynik\u00f3w: Zmienna Wynik a 255 b -1 B\u0142\u0119dy tego typu cz\u0119sto prowadz\u0105 do: Przy analizie protoko\u0142\u00f3w komunikacyjnych jest to szczeg\u00f3lnie niebezpieczne. Gdzie konwersja liczb szesnastkowych pojawia si\u0119 realnie w systemach operacyjnych, sieciach i elektronice Adres MAC: MAC 00:1A:2B:3C:4D:5E Ka\u017cda para znak\u00f3w to jeden bajt zapisany hex. Kolory HTML: Kolor Hex czerwony #FF0000 zielony #00FF00 niebieski #0000FF Kolor #FFFFFF: 255\u22c5164+255\u22c5162+255255\\cdot16^4+255\\cdot16^2+255255\u22c5164+255\u22c5162+255 oznacza maksymaln\u0105 jasno\u015b\u0107 wszystkich kana\u0142\u00f3w RGB. W debugerach proces\u00f3w mo\u017cna spotka\u0107 adresy: Adres 0x7FF61A20 0x00401000 W logach systemowych bardzo cz\u0119sto pojawiaj\u0105 si\u0119 kody b\u0142\u0119d\u00f3w: Kod 0x80070005 0xC0000005 Programista analizuj\u0105cy crash dump musi rozumie\u0107 takie warto\u015bci natychmiast, bez u\u017cywania kalkulatora. W mikrokontrolerach hex jest praktycznie standardem. Przyk\u0142ad konfiguracji rejestru: Kod PORTB = 0xFF; oznacza ustawienie wszystkich 8 bit\u00f3w portu na 1. W sieciach komputerowych analiza pakiet\u00f3w w Wiresharku r\u00f3wnie\u017c opiera si\u0119 o zapis szesnastkowy. Jeden b\u0142\u0119dnie odczytany bajt potrafi ca\u0142kowicie zmieni\u0107 interpretacj\u0119 danych. FAQ dotycz\u0105ce konwersji liczb szesnastkowych i interpretacji zapisu heksadecymalnego Czy liczba hex zawsze zaczyna si\u0119 od 0x Nie. Prefiks 0x jest tylko konwencj\u0105 u\u017cywan\u0105 w wielu j\u0119zykach programowania. Sama liczba mo\u017ce by\u0107 zapisana r\u00f3wnie\u017c jako FF, 2A albo ABC123. Dlaczego system szesnastkowy ma akurat 16 znak\u00f3w Poniewa\u017c 16 jest pot\u0119g\u0105 liczby 2. 16=2416=2^416=24 Dzi\u0119ki temu jedna cyfra hex odpowiada dok\u0142adnie 4 bitom. Czy mo\u017cna konwertowa\u0107 bardzo du\u017ce liczby hex r\u0119cznie Mo\u017cna, ale staje si\u0119 to niewygodne. Przy liczbach 64-bitowych lub 128-bitowych zwykle u\u017cywa si\u0119 narz\u0119dzi programistycznych albo kalkulator\u00f3w programistycznych. Dlaczego programi\u015bci wol\u0105 hex zamiast binarnego Hex jest du\u017co kr\u00f3tszy i \u0142atwiejszy do odczytu. Jednocze\u015bnie zachowuje bezpo\u015brednie powi\u0105zanie z bitami. Czy zapis dziesi\u0119tny jest dok\u0142adniejszy od hex Nie. To tylko inna reprezentacja tej samej warto\u015bci. Czy ka\u017cd\u0105 liczb\u0119 dziesi\u0119tn\u0105 mo\u017cna zapisa\u0107 hex Tak. Ka\u017cd\u0105 liczb\u0119 ca\u0142kowit\u0105 mo\u017cna zapisa\u0107 w dowolnym systemie pozycyjnym. Dlaczego w assemblerze i debuggerach wsz\u0119dzie wida\u0107 hex Poniewa\u017c sprz\u0119t komputerowy operuje na bitach i bajtach. Hex najlepiej odwzorowuje struktur\u0119 pami\u0119ci. Konwersja mi\u0119dzy systemami liczbowymi jest jedn\u0105 z tych rzeczy, kt\u00f3re pocz\u0105tkowo wygl\u0105daj\u0105 jak szkolne \u0107wiczenie matematyczne, a p\u00f3\u017aniej okazuj\u0105 si\u0119 podstawow\u0105 umiej\u0119tno\u015bci\u0105 przy analizie pami\u0119ci, debugowaniu program\u00f3w i pracy z elektronik\u0105. Bez rozumienia zapisu heksadecymalnego trudno wygodnie pracowa\u0107 z niskopoziomow\u0105 informatyk\u0105, protoko\u0142ami komunikacyjnymi albo architektur\u0105 komputer\u00f3w. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1576,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,1],"tags":[],"class_list":["post-1575","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kodowanie","category-poradnik"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1575"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1575\/revisions"}],"predecessor-version":[{"id":1577,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1575\/revisions\/1577"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1576"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}