{"id":159,"date":"2011-08-03T17:19:52","date_gmt":"2011-08-03T17:19:52","guid":{"rendered":"http:\/\/piatkosia.k4be.pl\/wordpress\/?p=159"},"modified":"2011-12-30T02:33:19","modified_gmt":"2011-12-30T02:33:19","slug":"159","status":"publish","type":"post","link":"https:\/\/piatkosia.k4be.pl\/wordpress\/2011\/08\/03\/159\/","title":{"rendered":"Walka z kodowaniem"},"content":{"rendered":"<p>Chcia\u0142abym nawi\u0105za\u0107 do posta, w kt\u00f3rym pisa\u0142am o kodowaniu <a href=\"https:\/\/piatkosia.k4be.pl\/wordpress\/?p=62\">(jego kopia znajduje si\u0119 tutaj).<\/a><br \/>\nPr\u00f3buj\u0119 kodzi\u0107 coraz wi\u0119cej ( w tym przypadku na system windows) i zaczyna mi przeszkadza\u0107 ju\u017c fakt konwertowania <\/p>\n<p>g\u017ceg\u017c\u00f3\u0142k\u0105 po ka\u017cdej poprawnej kompilacji, i kompilacja wyniku. Mog\u0142abym doda\u0107 wersj\u0119 tego programu i utworzy\u0107 <\/p>\n<p>makefile ale&#8230;<br \/>\nZawsze to nadprodukcja \u015bmieci i dodatkowe dziesi\u0105tki milisekund i operacje na plikach, kt\u00f3rych mo\u017cnaby unikn\u0105\u0107.<br \/>\nJest na to spos\u00f3b. A mianowicie (dzia\u0142a tylko przy czcionce Lucida Console, przy standardowej krzaczy:( ) <\/p>\n<p>wystarczy na pocz\u0105tku wpisa\u0107 linijk\u0119 system(&#8222;chcp 1250>NUL&#8221;); za\u015b na ko\u0144cu programu , system(&#8222;chcp 852>NUL&#8221;); by <\/p>\n<p>zostawi\u0107 tak, jak jest defaultowo. Aaa i nie myli\u0107 NUL z NULL, tam serio nie ma b\u0142\u0119du. Nie zapomnia\u0142am tego L. Po <\/p>\n<p>prostu tak si\u0119 ten pseudo plik zwie. Obecnie m\u00f3j kod wygl\u0105da niestety tak<br \/>\n<!--more--><\/p>\n<pre class=\"brush:cpp; collapse: true\">\r\n\r\n#include &lt;iostream&gt;\r\n#include &lt;fstream&gt;\r\n#include &lt;string&gt;\r\n#include &lt;cstdlib&gt;\r\n#include &lt;cstdio&gt;\r\n\r\n\r\nusing namespace std;\r\n\r\nunion kluczyk{\r\n        long long knum;\r\n        char ktab[8];\r\n };\r\n\r\n\r\n int main(int argc, char* argv[]){\r\n     system(\"chcp 1250&gt;NUL\");\r\n\/\/------------------------przygotowanie zmiennych -----------------------------\r\n    fstream zrodlo, cel;\r\n\r\n\r\n\r\n \/\/--------------Sprawdzenie poprawno\u009cci ilo\u009cci argument\u00f3w--------------------\r\n    if ((argc &lt;2) || (argc &gt; 3)){\r\n            cerr&lt;&lt;\"\\nB\u0142\u0105d wywo\u0142ania. Spr\u00f3buj \"&lt;&lt;argv[0]&lt;&lt;\" --help\";\r\n            system(\"chcp 852&gt;NUL\");\r\n            exit(1); \/\/B\u0142\u0105d wywo\u0142ania\r\n        }\r\n\r\n\/\/----------------Przygotowanie danych dla szyfrowania------------------------------\r\n    unsigned int licznik_klucza = 0;\r\n    unsigned int licznik_pola = 0;\r\n    kluczyk kej; \/\/Tu b\u0119d\u0119 przechowywa\u0107 klucz, pobierany w takiej formie jaka nam pasi:)\r\n    kej.knum = 0;\r\n    if (!((string)argv[1]==\"--help\")){   \/\/Przy helpie nie ma potrzeby podawania klucza;)\r\n    cout&lt;&lt;\"\\nPodaj klucz (liczbowy, im wi\u0119ksza tym lepiej, \\nale nie wi\u0119ksza ni\u017c 9223372036854775807): \";\r\n    cin&gt;&gt;kej.knum;\r\n    cout&lt;&lt;endl;\r\n}\r\n\/\/------------Dane gotowe-------------------------------------------------------------\r\n\r\n\r\n     if (argc ==2){\r\n            if ((string)argv[1]==\"--help\"){\r\n                cout&lt;&lt;\"Program szyfruje plik \u009f\u017ar\u00f3d\u0142owy \";\r\n                cout&lt;&lt;endl&lt;&lt;\"Wywo\u0142anie: \"&lt;&lt;argv[0]&lt;&lt;\" &lt;plik_\u009fzr\u00f3d\u0142owy&gt; [plik_wynikowy]\"&lt;&lt;endl;\r\n                cout&lt;&lt;\"Plik \u009f\u017ar\u00f3d\u0142owy musi by\u0107 podany i musi istnie\u0107. \\n\";\r\n                cout&lt;&lt;\"W przypadku braku podania celu, wypluwa zawarto\u009c\u0107 na ekran (ale to krzaki)\\n\";\r\n                cout&lt;&lt;\"Najlepiej podawa\u0107 du\u017ce liczby.\\n\";\r\n                system(\"chcp 852&gt;NULL\");\r\n                exit(0); \/\/poprawne zako\u0144czenie funkcji przy helpie\r\n            }\r\n\/\/----------------Obs\u0142uga szyfrowania z wywalaniem na ekran--------------------\r\n            zrodlo.open(argv[1], ios::in|ios::binary);\r\n            if (!zrodlo.good()){\r\n                cerr&lt;&lt;\"\\nB\u0142\u0105d otwarcia pliku.\";\r\n                system(\"chcp 852&gt;NULL\");\r\n                exit(2); \/\/b\u0142\u0105d otwarcia pliku \u009fr\u00f3d\u0142owego\r\n            }\r\n            \/\/w\u0142a\u009cciwe przeszyfrowanie z wypluciem na ekran\r\n            char znak, wynik;\r\n            unsigned int kolumna;\r\n            cout&lt;&lt;\"\\nPodaj szeroko\u009c\u0107 kolumny przy wy\u009cwietlaniu: \";\r\n            cin&gt;&gt;kolumna;\r\n            while (!zrodlo.eof()){\r\n                    licznik_klucza = licznik_pola % 8;\r\n                    zrodlo.get(znak);\r\n                    wynik = kej.ktab[licznik_klucza] ^ znak;\r\n                    licznik_pola ++;\r\n                    if ((licznik_pola % kolumna) == 0) cout&lt;&lt;endl; \/\/\u017ceby \u0142adniej wy\u009cwietla\u0142o\r\n                    cout&lt;&lt;wynik;\r\n            } \/\/od while (!zrodlo.eof())\r\n\r\n            zrodlo.close();\r\n            system(\"chcp 852&gt;NUL\");\r\n            exit(0);\r\n     } \/\/od dw\u00f3jki w argc\r\n\r\n\r\n\/\/-----------------------------teraz wywalamy z pliku do pliku:) ---------------------------\r\n\r\n        zrodlo.open(argv[1], ios::in|ios::binary);\r\n        if (!zrodlo.good()){\r\n            cerr&lt;&lt;\"\\nB\u0142\u0105d otwarcia pliku.\";\r\n            system(\"chcp 852&gt;NUL\");\r\n            exit(2); \/\/b\u0142\u0105d otwarcia pliku \u009fr\u00f3d\u0142owego\r\n        }\r\n\r\n        cel.open(argv[2], ios::in);\r\n        bool nadpisac = false;\r\n        char a;\r\n        if(cel){\r\n            cout&lt;&lt;\"\\nPlik docelowy istnieje. Nadpisa\u0107? T\/N: \";\r\n            cin&gt;&gt;a;\r\n            while(1){\r\n            if (toupper(a) == 'T'){\r\n                nadpisac = true;\r\n                break;\r\n            }\r\n            else if (toupper(a) == 'N'){\r\n                break;\r\n                }\r\n            else {\r\n                cout&lt;&lt;\"\\nNadpisa\u0107? T\/N:  \";\r\n                cin&gt;&gt;a;\r\n                continue;\r\n            }\r\n\r\n\r\n\r\n        }\r\n\r\n    }\r\n\r\n    cel.close();\r\n    if ((!cel) || nadpisac ==true){\r\n        cel.open(argv[2], ios::out|ios::binary);\r\n        char znak, wynik;\r\n         while (!zrodlo.eof()){\r\n                    licznik_klucza = licznik_pola % 8;\r\n                    zrodlo.get(znak);\r\n                    wynik = kej.ktab[licznik_klucza] ^ znak;\r\n                    licznik_pola ++;\r\n                    cel.put(wynik);\r\n            } \/\/od while (!zrodlo.eof())\r\n\r\n            zrodlo.close();\r\n            cel.close();\r\n            cout&lt;&lt;\"\\nZaszyfrowano. Wynik zapisano w \"&lt;&lt;argv[2]&lt;&lt;\".\\n\";\r\n            cout&lt;&lt;\"Odszyfrujesz tak jak szyfrowa\u0142e\u009c, je\u017celi podasz ten sam klucz.\";\r\n            system(\"chcp 852&gt;NUL\");\r\n\r\n    }\r\n    else {\r\n        cerr&lt;&lt;\"Plik docelowy istnieje, a nadpisa\u0107 zabroniono\";\r\n        system(\"chcp 852&gt;NUL\");\r\n        exit(3);\r\n    }\r\n    return 0;\r\n\r\n } \/\/od maina\r\n<\/pre>\n<p>Dlaczego niestety? Mam problem z owym &#8221; system(&#8222;chcp 852>NUL&#8221;); &#8221; Musz\u0119 (jak wida\u0107 w kodzie) umie\u015bci\u0107 go przed <\/p>\n<p>ka\u017cdym exitem, i oczywi\u015bcie przed returnem z maina. Tutaj ok, ale jak kod rozro\u015bnie si\u0119 jeszcze bardziej?<br \/>\nPrzyda\u0142oby mi si\u0119 co\u015b, jak destruktor ca\u0142ego programu. Co\u015b, co wykona si\u0119 w momencie jego zamkni\u0119cia bez wzgl\u0119du <\/p>\n<p>na to, co go spowoduje (program si\u0119 wykrzaczy, sko\u0144czy si\u0119 prawid\u0142owo, kto\u015b go skilluje, program rzuci wyj\u0105tek, <\/p>\n<p>sko\u0144czy si\u0119 przedwcze\u015bnie przez warunkowy exit, &#8230;, &#8230;, &#8230;). Any idea jak to wymajstrowa\u0107?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chcia\u0142abym nawi\u0105za\u0107 do posta, w kt\u00f3rym pisa\u0142am o kodowaniu (jego kopia znajduje si\u0119 tutaj). Pr\u00f3buj\u0119 kodzi\u0107 coraz wi\u0119cej ( w tym przypadku na system windows)<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/piatkosia.k4be.pl\/wordpress\/2011\/08\/03\/159\/\">Lecim dalej<span class=\"screen-reader-text\">Walka z kodowaniem<\/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,54,49,24],"tags":[211,38,40,26],"class_list":["post-159","post","type-post","status-publish","format-standard","hentry","category-bez-kategorii","category-c","category-ms","category-programowanie","category-techniczne","tag-c","tag-kodowanie","tag-konsola","tag-powloki","entry"],"_links":{"self":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/159","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=159"}],"version-history":[{"count":7,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/159\/revisions"}],"predecessor-version":[{"id":335,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/159\/revisions\/335"}],"wp:attachment":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}