Wczytywanie bitów z pliku jako char - ETX

0

Witam
Obecnie próbuję napisać kompresję pliku, z tego powodu pracuję na bitach, tworzę char, zmieniam jego bity na takie jak chcę i zapisuje go do pliku.
Odczytania takiego chara z pliku i zamienienie go z powrotem na odpowiedni znak nie jest problemem dla większości kombinacji bitowych, jednak w momencie gdy w pliku znajduje się taki zapis bitów 00000011, to odkodowanie nie przebiega poprawnie.

W jaki sposób mogę pobrać z pliku znak ETX (00000011) i zapisać go do char'a?

Obecny kod:

	std::ofstream Gplik("Data/KCP.save", std::ios::out);
	std::fstream Hplik("Data/KCPDB.save", std::ios::in);

	unsigned long long int Kz = 0;

	std::vector <char> Kt;

	short int Kb;

	while(!Hplik.eof()){

		t = Hplik.get();
		Kt.push_back(t);
		Kz++;

	}	

	for (unsigned long long int KfT = 0; KfT < Kz; KfT++){

		t = Kt[KfT];
		Kb = 0;

		for (short int KfTbc = 0; KfTbc < 2; KfTbc++){

			for (short int KfTb = 3 + 4 * KfTbc; KfTb >= 0 + 4 * KfTbc; KfTb--){  

				if(t&(1<<KfTb)){

					Kb += pow(2,KfTb);

				}

			}

		}

		Gplik << Kb;

	}
	

	Gplik.close();
	Hplik.close();
0

Nie daję rady połapać się w tym Twoim zapisie ._.
http://stackoverflow.com/questions/10178980/how-to-convert-a-binary-string-to-a-base-10-integer-in-java
Co prawda Java, lecz powinieneś dać radę się rozczytać.

1

Nawet wczytywanie masz nie poprawne.

    std::ofstream Gplik("Data/KCP.save");
    std::fstream Hplik("Data/KCPDB.save");
 
    while(Hplik.get(t)) Kt.push_back(t);
    Kz=Kt.size();

Wypada poczytać przynajmniej przykłady z dokumentacji przynajmniej tego co używasz.

1

Zacząłbym od dodania ios::binary

http://www.cplusplus.com/doc/tutorial/files/

Edit: i nie używaj char, tylko raczej unsigned char:

typedef unsigned char byte;

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