Monika90 |
» 2017-08-24 10:46:19 Popularne systemy operacyjne (Windows i Linux) nie dzielą plików na binarne i tekstowe, dla nich plik to po prostu ciąg 8-bitowych bajtów. Różnicę wprowadza dopiero biblioteka standardowa C/C++ w wersji dla Windows i polega on na tym, że podczas zapisu do pliku otwartego w trybie tekstowym bajt o wartości 10 jest zastępowany parą bajtów 13 10, podczas odczytu odwrotnie: zapisana w pliku para 13 10 zostanie zamieniona na samo 10, dodatkowo gdy biblioteka odczyta bajt o wartości 26 to udaje że plik się skończył. W trybie binarnym nie ma żadnych dziwnych konwersji, to co zapiszesz to się zapisze. |
|
jankowalski25 |
» 2017-08-24 23:03:46 Jak komputer "oznacza sobie" co jest liczbą, a co znakiem skoro na pewnym poziomie to wszystko to i tak kod szesnastkowy? |
Na pewnym etapie nie rozróżnia tego wcale. Wtedy wszystko zależy od samych instrukcji. W kodzie maszynowym zwykle nie potrzeba żadnej informacji typu "tutaj mam znaki, a tutaj liczbę". Po prostu masz instrukcje, które odczytują jeden bajt z pozycji 0x2183a42e. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-08-24 23:11:16 I to na prawdę jest taka wielka różnica? Potrzebny był taki zapis binarny, tylko dlatego, że parę znaków zapisuje się inaczej. Podsumowując, to znaki w pliku tekstowym i binarnym są zapisywane za pomocą kodowania ASCII/UTF, przy czym w pliku tekstowym inaczej mogą być zapisywane niektóre znaki, np. znak nowej linii? |
|
pekfos |
» 2017-08-24 23:20:42 Podsumowując, to zadajesz pytania na które odpowiedzi są w Zapis binarny. Artykule, do którego sam się odwołujesz.. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-08-24 23:53:44 W zasadzie, to próbowałem zrozumieć poniższy fragment: Na przykład liczba 42 przechowywana w zmiennej typu int zostanie zapisana jako ciąg bajtów 00 00 00 2A, podczas gdy w pliku tekstowym zostałaby przed zapisaniem przetworzona na znaki '4' i '2', co w formacie ASCII odpowiada bitom 34 i 32. Edytor tekstu otwierając pliki dokonuje operacji odwrotnej, zamieniając dane binarne na znaki, które im odpowiadają. Oczywistym jest, że w wypadku plików binarnych taka zamiana nie ma sensu, stąd biorą się 'krzaki' podczas próby odczytania ich w ten sposób - np. wspomniana liczba 42 została by zamieniona na ' *'. |
W twoim artykule było napisane, że Dane zapisane w trybie binarnym są w niezmienionej formie zapisywane do pliku, podczas gdy w trybie tekstowym, dane są modyfikowane, by pasowały do konwencji zapisu tekstu w danym środowisku. |
Ale nic nie wspominałeś o tym, o czym mówi poprzedni cytat, to znaczy, że taka liczba 42 jest rozdzielana na 4 i 2 i konwertowana na 34 i 32. Tak więc jeśli możesz, wyjaśnij jak to jest z tym zapisem. |
|
Kinexity |
» 2017-08-24 23:57:13 Kodowanie masz domyślnie tylko w pliku tekstowym. W binarnym możesz mieć wszystko - plik binarny może mieć nawet twój WŁASNY FORMAT i nie będzie z tym problemu. Do pliku binarnego po prostu zrzucasz wszystko jak jest i nic nie zmieniasz. A tak wgl to na poziomie pamięci to i tak wszystko jest liczbą i komputer nie co w ogóle ma z daną rzeczą zrobić dopóki mu nie powiesz. Tak jak masz np. unię - jakbyś zajrzał jak twój kod wygląda na poziomie assemblera, to zobaczyłbyś jedną zmienną, która nie wozi ze sobą nigdzie informacji o tym, czym jest. Możesz sobie wyciągnąć pierwiastek z 8-znakowego ciągu i nikt ci tego nie zabroni, bo komputery to abstrakcja na abstrakcji abstrakcję poganiająca. Nawet pojedynczy bit jest tworem abstrakcyjnym - tak naprawdę jest to zbiór atomów/cząstek, których suma ładunków jest nierówna zeru itd. |
|
pekfos |
» 2017-08-25 00:28:14 Ale nic nie wspominałeś o tym, o czym mówi poprzedni cytat, to znaczy, że taka liczba 42 jest rozdzielana na 4 i 2 i konwertowana na 34 i 32. Tak więc jeśli możesz, wyjaśnij jak to jest z tym zapisem. |
Liczba to liczba. Tekst to ciąg liczb. 42 to liczba - jedna liczba 42, "42" to tekst - dwie liczby 34h i 32h (i 0, jeśli koniecznie chcesz). Jeśli masz liczbę 2 i chcesz ją zapisać do pliku, to masz 2 drogi: Tryb otwarcia pliku tu akurat nie ma znaczenia. Jedyne co się zmienia, to to czy zapisujesz '2', czy (char)2. A więc czy 2 jest reprezentacją graficzną znaku, czy reprezentacją liczbową znaku. Jeśli dalej masz z tym problem, to porzuć '2' na rzecz '@'. Nie ma takiej cyfry '@'.. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-08-25 01:38:08 O takie odpowiedzi mi chodziło :D
Wypada podziękować wszystkim za wytrwałość w tłumaczeniu mi tego wszystkiego. Tak więc i czynie, a temat zamykam ;) |
|
1 2 « 3 » |