Algorytm LZ77 - Operacje na bitach

0

Witam
Obecnie próbuję napisać algorytm podobny do LZ77, samo istota jego działania nie stanowi dla mnie problemu, jednak operacje na bitach to zupełnie inna sprawa. Według artykułu plik należy zapisać używając bitów.
Czy istnieje sposób dzięki, któremu można uzyskać bezpośredni dostęp do bitów i je ustawić zgodnie z własną potrzebą na zasadzie

B[0] = 0;
B[1] = 1;
B[2] = 0;

Drugi mój problem związany z bitami to sposób ich zapisania do pliku, próbowałem w ten sposób, jednak nic z tego nie wyszło:

	std::string BBB = "48";
	std::ofstream Kplik("Data/KCP.save", std::ios::out | std::ios::binary);
	Kplik.write((char*)&BBB, sizeof(BBB));
	Kplik.close();

Bardzo proszę o wytłumaczenie tego zagadnienia, link do dokumentacji lub kursu, wujka google pytałem o radę jednak milczy.

3

Zapisujesz zawsze całe bajty, czyli po 8 bitów.

A bity w słowach ustawiasz za pomocą operacji bitowych...

1

Załóżmy, że masz 3 kody do zapisania:

  • kod 1-szy o 7 bitach, czyli tutaj aaaaaaa,
  • kod 2-gi o 5 bitach, czyli tutaj bbbbb,
  • kod 3-ci o 3 bitach, czyli tutaj ccc,

Chcemy je zapisać w strumieniu bitów. Wychodzi nam strumień:

  • aaaaaaabbbbbccc,

Trzeba to podzielić na bajty, czyli na grupy po 8 bitów. Wychodzi nam:

  • aaaaaaab, bbbbccc,

Ostatnia grupa jest niepełna więc ją dopełniamy, np zerami. Wychodzi wtedy:

  • aaaaaaab, bbbbccc0

Otrzymaliśmy więc dwa bajty i je zapisujemy do pliku.

1
value|=(1<<BIT) // ustaw bit BIT
value^=(1<<BIT) // zmień bit BIT
value&=~(1<<BIT) // resetuj bit BIT
if(value&(1<<BIT)) // bit BIT - ustawiony
0

Dziękuje wszystkim za pomoc, problem rozwiązany.

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