[C++] Odczyt/zapis bit po bicie

Odpowiedz Nowy wątek
2010-04-02 21:23

Rejestracja: 14 lat temu

Ostatnio: 8 lat temu

0

Witam!
Czy jest możliwy binarny zapis do pliku bit po bicie? Wyczytałem, że możemy jedynie zapisywać 8 bitów, czy to prawda?

Prosiłbym o jakieś wskazówki/przykłady, w jaki sposób zapisać/odczytać bity z pliku i jak je potem interpretować.

Pozdrawiam, Ziem!

Pozostało 580 znaków

2010-04-02 22:53
Moderator

Rejestracja: 12 lat temu

Ostatnio: 13 godzin temu

0

Wczytujesz jedno słowo char (najczęściej 8 bitów), a potem przy pomocy operatorów binarnych &, |, ^, ~ je modyfikujesz.


Pozostało 580 znaków

t0m_k-tmp
2010-04-02 23:26
t0m_k-tmp
0

Najszybciej zrobic tak jak winefresh mowi, z tym ze albo wczytany bajt przeliczasz na system dwojkowy, np. zapisujac bity do 8-elementowej tablicy char, albo przesuwasz caly czas liczbe w prawo za pomoca operatora >> i porownujesz 1 bit operatorem chociazby tym & z jedynka, jesli zwroci prawde to masz 1, jesli nie to 0.
Zapis wyglada podobnie skladasz sobie bajcik jak chcesz i zapisujesz cale bajty lub alternatywnie piszesz sam funkcje zapisujaca po bicie do pliku ;)

Pozostało 580 znaków

2010-04-03 12:05

Rejestracja: 10 lat temu

Ostatnio: 9 lat temu

0

Można jeszcze unie wykorzystać.

Pozostało 580 znaków

2010-04-03 12:40

Rejestracja: 13 lat temu

Ostatnio: 6 lat temu

2010-04-03 20:48

Rejestracja: 14 lat temu

Ostatnio: 8 lat temu

0

Dzięki za odpowiedzi!

Jeszcze się w to wszystko nie zagłębiałem, na razie szukam informacji. Postaram się to jeszcze bardziej sprecyzować.

Docelowo potrzebuję tego do algorytmu Huffmana.
Potrzebuję mieć możliwość zapisu/odczytu bitowego do pliku. Teraz tak, będę miał jakąś tablicę charów, która będzie zawierała kody dla poszczególnych liter (101..) i muszę "przekonwertować" to na bity i zapisać binarnie do pliku. Potem do odkodowania treści, będę te bity musiał odczytać i jakoś zinterpretować, czy mam 1 czy 0 (najlepiej odtworzyć tablicę charów).

Zapis i odczyt mogę zrobić za pomocą i(o)fstream z flagą ios_base::binary. Tylko tutaj pojawia się problem, jak z tablicy charów "zrobić" zestaw bitów gotowych do zapisu? Prosiłbym o jakieś wskazówki/rady/przykłady.

Widzę, że to może być dobry początek: http://www.cplusplus.com/reference/stl/bitset/bitset/ .

Pozostało 580 znaków

t0m_k-tmp
2010-04-03 21:08
t0m_k-tmp
0

Twoj problem sprowadza sie do zamiany systemow liczbowych, wiec nie powinno byc z tym problemow, tutaj masz przyklad ode mnie, chociaz zastanawialem sie czy go wrzucac, bo na dobra sprawe bylo to juz walkowane kilka razy.

char *dec_to_bin(int n) {
    static char tab[32]; int i;

    for(i = 32; i; i--) {
        if(n & 1)
            tab[i-1] = '1';
        else
            tab[i-1] = '0';
        n >>= 1;
    }

        return tab;
}

Pozostało 580 znaków

2010-04-04 17:24

Rejestracja: 14 lat temu

Ostatnio: 8 lat temu

0

Dzięki serdeczne! :)

Pozostało 580 znaków

Odpowiedz

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