Odczytanie binarne pliku

0

Oto kod:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
int main()
{
bool a[8];
ifstream plik("plik.gif", ios_base::binary);
plik.read((char*)a, sizeof(a));
cout<<(bool)a[0]<<a[1]<<a[2]<<a[3]<<a[4]<<a[5]<<a[6]<<a[7]<< endl;
} 

Chciałbym by program pobierał znak po znaku do EOF pliku i konwertował każdy znak na postać binarną.
Coś w stylu:
00001111
10101010
11123441
.
.
.
Niestety gdzieś jest błąd , proszę o pomoc :)
Pozdrawiam

0

Poza bezsensownym rzutowaniem w przedostatniej linijce, to co jest "nie tak" z tym kodem?

0

To co napisałeś niestety nie ma sensu, bo wielkość bool-a w pamięci komputera wcale nie zajmuje jednego bita. Więcej, tablica bool a[8]; zajmuje /co najmniej/ 8 bajtów pamięci. Dlatego z pliku odczytujesz za każdym razem co najmniej 8 bajtów, a chcesz czytać po jednym.

Moja propozycja - czytanie po jednym znaku z pliku i wypisywanie go za pomocą pomocniczej funkcji print_byte (mój ulubiony sposób realizowania rozkładu liczby na bity, ale da się też inaczej)

#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;

void print_byte(unsigned char c) {
    for (int mask = 0x80; mask > 0; mask >>= 1) {
        cout << (bool)(c & mask);
    }
}

int main()
{
    ifstream plik("a.cpp", ios_base::binary);
    unsigned char byte;
    while(!plik.read((char*)&byte, sizeof(unsigned char)).fail()) { // fakt, trochę rozbudowany warunek...
        print_byte(byte);
    }
} 
0

Po raz 997987234834227843282348324 chyba powtarzam = język/środowisko podajemy w TAGU, a nie w temacie wątku. Chyba po prostu będzie trzeba być tak złośliwym jak według mnie osoby ignorujące te prośbe w przyklejonym temacie i wywalać takie wątki z adnotacją o nieprawidłowym temacie albo bez powodu.

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