Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kodowanie UTF 8/16/32 w C++ - przechowywanie znaków

Ostatnio zmodyfikowano 2017-08-25 01:38
Autor Wiadomość
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.
P-164254
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.
P-164279
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?
P-164280
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..
P-164281
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.
P-164284
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.
P-164285
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:
  • Zapiszesz ją jako tekst, więc "2" i w pliku będzie liczba - bajt o wartości 50, ale jak ktoś plik otworzy notatnikiem, to zobaczy tam "2".
  • Zapiszesz ją jako liczba, więc 2 i w pliku będzie bajt o wartości 2, a w notatniku zobaczysz jakiś krzak, albo nic, jeśli czcionka nie ma żadnego glifu pod tak niskim kodem.
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 '@'..
P-164286
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 ;)
P-164294
1 2 « 3 »
Poprzednia strona Strona 3 z 3