ofstream i zapis binarny

0

Fragment mojego kodu:

ofstream outfile;
outfile.open(path, ios::out | ios::trunc | ios::binary);
float a=0.0f, b=1.0f, c=0.5f;
outfile << a << b << c;

Mimo użycia flagi binary zapis nie jest binarny. Plik ma wielkość 5 bajtów a jego treść to (po otworzeniu notatnikiem): 010.5
Dlaczego nie zapisuje w postaci binarnej tylko tekstu?

0

Bo to Ci wypisze w postaci tekstu w zapisie binarnym. Jak chcesz zapisywać binarnie to poczytaj o metodzie write().

0

Znam metodę write, ale chciałem używać strumieni. Czy flaga binary nie powinna powodować, że dane zapisywane są w postaci binarnej?

0

Nie, powinna powodować, że liczby są wypisywane w postaci binarnej.

0
winerfresh napisał(a)

że liczby są wypisywane w postaci binarnej.

rozwiń proszę, bo nie rozumiem czym ma się to różnić od zapisu w postaci binarnej...

0

Otwarcie pliku jako binarnego ma wpływ tylko i wyłącznie na to, czy znaki \n mają być zapisywane jako jeden bajt o wartości 10d (tryb binarny), czy zamieniane automatycznie na sekwencję końca linii obowiązującą w danym systemie operacyjnym bądź danym kodowaniu znaków (tryb tekstowy). pod Windows tą sekwencją są dwa bajty: 13d 10d.
Zatem plik binarny powinien być otwierany jako binarny, a tekstowy jako tekstowy. Nie zmienia to jednak charakteru zapisywanych danych: dane tekstowe zapisane do pliku binarnego pozostaną tekstem (choć znaki końca linii mogą się kaszanić), a dane binarne do tekstowego pozostaną binarne (i na dodatek zostaną uszkodzone przez niepotrzebną konwersję).

ofstream<< służy do zapisu TEKSTU.

0

Flaga binary mówi chyba tylko to, żeby nie zamieniać znaku '\n' na odpowiadające w danej platformie (w Windowsie "\r\n"). Dzięki temu dane zapisywane przez write/read nie są modyfikowane w przypadku spotkania w nich bajtu o wartości 10.

0

Dzięki za wyjaśnienie, w takim razie będę się męczył z write i read.

0

Jeżeli tworzysz obiekt typu ofstream, to nie musisz wpisywać ios::trunc bo jest on w domyśle. Nawet więcej, tylko jeżeli wpiszesz ios::app to trunc się nie uruchomi, w każdym innym przypadku trunc jest jak już powiedziałem domyślnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1