Pobieranie z pliku kolejnych bitów
Ostatnio zmodyfikowano 2011-05-22 17:50
Katruf Temat założony przez niniejszego użytkownika |
Pobieranie z pliku kolejnych bitów » 2011-05-15 14:17:02 Witam, chcę napisać program który pakuje kilka plików(bez względu na format)do jednego pliku(bez kompresji) a potem prawidłowo je odtwarza. Do tego jest potrzebne pobieranie z pliku kolejnych bitów. Czy istnieje jakiś łatwy sposób aby tego dokonać? |
|
absflg |
» 2011-05-15 14:28:17 Nie bitów, a bajtów.
Metoda get() strumienia. |
|
Katruf Temat założony przez niniejszego użytkownika |
» 2011-05-15 14:58:14 a czy możesz podać przykład?? Ja także potrzebuje tego bajta na bity rozłożyć do algorytmu szyfrowania |
|
Mrowqa |
» 2011-05-15 15:23:29 Najlepiej się rozkłada dzięki unii i polom bitowym: struct rozlozone { unsigned int a: 1, b: 1, h: 1; } union rozklad { char nasz_bajt; rozlozone nasze_bity; }
rozklad x; x.nasz_bajt = strumien.get(); int bit_nr_3 = x.nasze_bity.c;
To wyżej to taka mała rada, by się nie przemęczyć. Jeśli te zapisy są dla ciebie za długie, to unia może być anonimowa ;) Pozdrawiam, Mrowqa |
|
absflg |
» 2011-05-15 22:31:30 Tak po prawdzie to korzystanie z pól o nazwach a..h jest niewygodne, bo w wielu miejscach będzie wymagane stworzenie długich instrukcji warunkowych. Moja rada: użyć przesunięcia i maskowania bitów.
Przykład:
char get_byte = stream.get();
short N;
bool get_bit =( get_byte >> N ) & 1;
get_byte |= 1 << N;
get_byte &= ~( 1 << N );
Taki zapis pozwala odwoływać się do bitów po ich numerze. |
|
Katruf Temat założony przez niniejszego użytkownika |
» 2011-05-18 19:54:04 Dzięki wielkie właśnie takiego sposobu poszukiwałem :)) |
|
Katruf Temat założony przez niniejszego użytkownika |
» 2011-05-20 19:23:19 Pojawił się jeszcze jeden problem jak kopiuję plik tekstowy albo bitmapę to wszystko gra ale jak chcę skopiować plik *.exe to np zamiast 4MB kopiuje mi 2KB i przerywa w czym może leżeć przyczyna ( do wykrywania czy plik się skończył używam funkcji .eof() ) |
|
Mrowqa |
» 2011-05-21 14:19:16 Do kopiowania plików możesz użyć CopyFile() czy jak to się tam zwało :P Klik :PPozdrawiam, Mrowqa |
|
« 1 » 2 |