{"id":218,"date":"2011-08-31T01:33:10","date_gmt":"2011-08-31T01:33:10","guid":{"rendered":"http:\/\/piatkosia.k4be.pl\/wordpress\/?p=218"},"modified":"2011-12-30T02:35:54","modified_gmt":"2011-12-30T02:35:54","slug":"hexdump","status":"publish","type":"post","link":"https:\/\/piatkosia.k4be.pl\/wordpress\/2011\/08\/31\/hexdump\/","title":{"rendered":"hexdump"},"content":{"rendered":"<p>Czasami zdarza si\u0119, \u017ce cz\u0142owiek nie ma aktualnie potrzebnego narz\u0119dzia. \u00a0Pobieranie z neta jest albo niemo\u017cliwe, albo zajmie zbyt du\u017co czasu, a cz\u0142owiek chce plikowi w bebechy zajrze\u0107. No i poczu\u0142am co\u015b takiego i klepn\u0119\u0142am taki kawa\u0142ek kodu (thx widmo za podpowied\u017a co do zmiany define na warto\u015b\u0107 predefiniowan\u0105)<br \/>\n<!--more--><\/p>\n<pre class=\"brush:cpp; collapse: true\">#include &lt;iostream&gt;\r\n#include &lt;fstream&gt;\r\n#include &lt;cstring&gt;\r\n#include &lt;cstdlib&gt;\r\n\/**\r\n* --==LOOKACZ==-- by Angelika Maria Pi\u0105tkowska aka piatkosia\r\n* kontakt: piatkosia.apt@interia.pl\r\n* Program wy\u015bwietla zawarto\u015b\u0107 dowolnego pliku binarnego. Na razie bez mo\u017cliwo\u015bci edycji.\r\n* Wywo\u0142anie: nazwa_programu plik_do_odczytu\r\n* W przypadku b\u0142\u0119dnego wy\u015bwietlania tre\u015bci dokumentu prosz\u0119 ustawi\u0107 czcionk\u0119 Lucida console.\r\n* W przypadku linuxa mo\u017ce si\u0119 okaza\u0107 konieczne u\u017cycie iconv do \u017ar\u00f3d\u0142a w celu zmiany kodowania.\r\n* Kody b\u0142\u0119d\u00f3w:\r\n* 0: Program wykonany poprawnie\r\n* 1: Nieprawid\u0142owa ilo\u015b\u0107 parametr\u00f3w.\r\n* 2: B\u0142\u0105d otwarcia pliku. Prawdopodobnie plik nie istnieje, lub u\u017cytkownik nie ma do niego dost\u0119pu.\r\n* Pojawiaj\u0105ce si\u0119 co jaki\u015b czas xx to by\u0142a warto\u015b\u0107 ffff kt\u00f3ra na pewno nie by\u0142a charem, tak\u017ce jaki\u015b inny znak, ni\u017c ten, kt\u00f3ry m\u00f3g\u0142by\u0107 typu char.\r\n* sprawdzenie kodu b\u0142\u0119d\u00f3w:\r\n* systemy POSIX\/LINUX: echo $?\r\n* systemy DOS\/WINDOWS: echo %errorlevel%\r\n**\/\r\ninline void setwinda(){\r\n    #ifdef _WIN32\r\n    system(\"chcp 1250&gt;NUL\");\r\n    #endif\r\n}\r\ninline void unsetwinda(){\r\n    #ifdef _WIN32\r\n    system(\"chcp 852&gt;NUL\");\r\n    #endif\r\n}\r\nusing namespace std;\r\n\/\/Program jest kr\u00f3tki, wi\u0119c nie b\u0119d\u0119 go jako\u015b rozbija\u0107 specjalnie\r\nint main(int argc, char* argv[]){\r\n    setwinda();\r\n\r\n    if (argc ==2 &amp;&amp; (string)argv[1]==\"--help\"){\r\n        cout&lt;&lt;\"                    --==LOOKACZ==--\\n\";\r\n        cout&lt;&lt;\"Program wy\u015bwietla co jest w pliku w formacie hex i ascii. I nic wi\u0119cej\\n\";\r\n        cout&lt;&lt;\"U\u017cycie\\n\";\r\n        cout&lt;&lt;argv[0]&lt;&lt;\" &lt;plik wej\u015bciowy&gt;\\n\";\r\n        unsetwinda();\r\n        return 0; \/\/przecie\u017c program wykona\u0142 si\u0119 poprawnie\r\n        }\r\n\r\n    if (argc == 1){\r\n        cout&lt;&lt;\"Czego\u015b chyba zapomnia\u0142e\u015b\\n Nie wiesz czego?\\n sprawd\u017a u\u017cywaj\u0105c \"&lt;&lt;argv[0]&lt;&lt;\" --help\";\r\n        unsetwinda();\r\n        return 1; \/\/Niepoprawna ilo\u015b\u0107 parametr\u00f3w\r\n    }\r\n\r\n    if (argc &gt; 2){\r\n        cout&lt;&lt;\"Nie rozp\u0119dzasz si\u0119 przypadkiem? \\n\";\r\n        cout&lt;&lt;\"Sprawd\u017a: \"&lt;&lt;argv[0]&lt;&lt;\" --help\\n\";\r\n        unsetwinda();\r\n        return 1; \/\/niepoprawna ilo\u015b\u0107 argument\u00f3w\r\n\r\n    }\r\n\/\/No dobra, Jeste\u015bmy pewni, \u017ce nikt nie poda\u0142 tego, czego nie trzeba:)\r\n    ifstream plik; \/\/\/ Zmienna plikowa klasy ifstream\r\n    plik.open(argv[1], ios::in|ios::binary);\r\n    if (!plik.good()){\r\n        cerr&lt;&lt;\"\\nB\u0142\u0105d otwarcia pliku\";\r\n        unsetwinda();\r\n        return 2; \/\/B\u0142\u0105d otwarcia pliku\r\n    }\r\n    char bufor[16] = {}; \/\/\/Tablica do przechowywania danych, na kt\u00f3rych b\u0119dziemy operowa\u0107.\r\n    int waiter = 1; \/\/\/ Zmienna kt\u00f3r\u0105 wykorzystamy do przerywania pracy po 20 linijkach wczytanych danych\r\n    cout&lt;&lt;\"------------------Warto\u015b\u0107 hex ------------------ | -Warto\u015b\u0107 ascii -\"&lt;&lt;endl;\r\n    while (!plik.eof()){\r\n        plik.read(bufor, 16);\r\n        \/\/Wypisanie danych w postaci hexowej\r\n        for (int i = 0; i&lt;16; i++){\r\n            cout.width(2);\r\n            cout.fill('0');\r\n            if (((unsigned int)bufor[i]) &gt; 0xff ) cout&lt;&lt;\"xx \";\r\n            else cout&lt;&lt;hex&lt;&lt;(unsigned int)bufor[i]&lt;&lt;\" \"; \/\/Nie nieee, \u017cadnego ko\u0144ca linii nie b\u0119dzie\r\n        }\r\n        cout&lt;&lt;\" | \";\r\n        for (int i = 0; i&lt;16; i++){\r\n            if ((bufor[i])&lt;32) cout&lt;&lt;'.';\r\n            else cout&lt;&lt;bufor[i];\r\n        }\r\n        cout&lt;&lt;endl;\r\n        memset(bufor, 0, 16); \/\/czyszczenie bufora;\r\n\r\n        \/\/\u017ceby ekran nie ucieka\u0142\r\n        if ((waiter % 20) == 0){\r\n            char a; \/\/\/ca\u0142o\u015b\u0107 by mie\u0107 nieco podgl\u0105d na plik\r\n            cout&lt;&lt;\"--Aby kontynuowa\u0107 naci\u015bnij enter                 |\";\r\n            cin.get(a);\r\n        }\r\n        waiter++;\r\n\r\n    }\r\n    plik.close();\r\n    unsetwinda();\r\n    return 0;\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Czasami zdarza si\u0119, \u017ce cz\u0142owiek nie ma aktualnie potrzebnego narz\u0119dzia. \u00a0Pobieranie z neta jest albo niemo\u017cliwe, albo zajmie zbyt du\u017co czasu, a cz\u0142owiek chce plikowi<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/piatkosia.k4be.pl\/wordpress\/2011\/08\/31\/hexdump\/\">Lecim dalej<span class=\"screen-reader-text\">hexdump<\/span> <i class=\"fas fa-angle-right\"><\/i><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,50,49,24],"tags":[211,206,44],"class_list":["post-218","post","type-post","status-publish","format-standard","hentry","category-bez-kategorii","category-c","category-programowanie","category-techniczne","tag-c","tag-pomysly","tag-program","entry"],"_links":{"self":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=218"}],"version-history":[{"count":7,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/218\/revisions"}],"predecessor-version":[{"id":340,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/218\/revisions\/340"}],"wp:attachment":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}