logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak obciąć i przywrócić pierwsze 3 bity z bajtu w ASCII?

Mercii 13 Mar 2008 12:15 2128 8
REKLAMA
  • #1 4903888
    Mercii
    Poziom 10  
    Posty: 51
    Witam
    Mam poważny problem, ponieważ dawno nie programowałem ni emoge sobie poradzić z pewnie prostym problemem.
    Muszę pobrać jakiś tekst i obcinając piwersze 3 bity z kązdego bajtu(litery) to bedzie 010 (w ascii). Zapisać to gdzieś ,np. tablica. Następnie odczytać te dane z tablicy i powstawiać barakujące bity na początek każżdego bajtu. Tzn zakowdwać jakiś tekst i pożniej móc do odkodować (zdekompresowac).
    Jest takie coś mozliwe?
    Z góry dziekuje za pomoc.

    Popraw błędy i interpunkcję. Użyj przycisku PISOWNIA -->REGULAMIN pkt 15.
    Następnym razem będzie OSTRZEŻENIE.
    Tytuł zmieniłem. [hefid]


    Moderowany przez Marek_Skalski:

    Usuwam.
    3.1.17. Nie wysyłaj pytań bardzo podstawowych, na które odpowiedzi można znaleźć w instrukcji obsługi lub ogólnie dostępnych źródłach. Nie prezentuj postawy, że mi się należy. Dbaj o poziom pytań i dyskusji. Dziękujemy.
    3.1.13. Dbaj o poprawność językową i zachowuj zasady netykiety. Nie wysyłaj wiadomości z których trudno wywnioskować co ich autor chciał przekazać.

  • REKLAMA
  • #2 4904053
    Konto nie istnieje
    Konto nie istnieje  
  • #3 4904594
    Seba85
    Poziom 17  
    Posty: 110
    Pomógł: 24
    Możesz napisać jaki chcesz wykorzystać algorytm kompresji?
  • REKLAMA
  • #4 4907126
    Mercii
    Poziom 10  
    Posty: 51
    Dzieki za odpowiedzi. Jezlei chodzi o algorytm kompresji to nie moge go stosowac. Obcinanie tych własnie 3 bitów z prozdu to jest kompresja która musze zaimplementowac. Nigdy sie nie bawiłem w operacje bitowe i przyznam ze kompletnie mnie to nie intersuje i dletego mam porblemy.
    Program bedzie pisany w jezyku C++.
    Jak mnie wiećej może wyglądac taki program:
    wczytuje tekst do tablicy charów:
    
    //....
    //odczyt
    iliada = new char[rozmiar+1];
    plik.read(iliada,rozmiar);
    plik.close();
    //.....
    //zapis do pliku
    kompresja1.open("c:\\kompresja1.txt", ios::out|ios::binary);
     kompresja1.write(iliada, strlen(iliada));
     kompresja1.close();   
    

    I teraz mam pytanie jak operować na bitach z tej tablicy?
    Tzn chciałby, odczytać 8 bitów, usunąć z nich 3 pierwsze i wczytać te 5 do jakieś tablicy. To byłoby w pętli i do tablicy wczytałoby mi cały tekst ale tylko po 5 bitów z każdego znaku.
    Natępnie w czasei odczytu z tablicy odczytywałoby po koleji 5 bitów i dodawało do nich na poaczątek 3 usunięte bity i zapisywaloby to do tablicy już z zdekompresowanym tesktem.
    Cieżko takie coś zaimplemetować?
    Proszę pomożcie bo już naprawdę się z tym męcze.
    Pozdrawiam

    Poprawna pisownia też kolegi nie interesuje ? Błędy!
  • REKLAMA
  • #5 4907269
    Konto nie istnieje
    Konto nie istnieje  
  • #6 4907747
    Mercii
    Poziom 10  
    Posty: 51
    Chodzi mi o przykład jak pobrać baj z tablicy.
  • REKLAMA
  • #7 4907760
    Konto nie istnieje
    Konto nie istnieje  
  • #8 4916281
    Wicked
    Poziom 18  
    Posty: 174
    Pomógł: 11
    Ocena: 6
    Napisz w jakim języku piszesz. Jeśli w C, to deklarujesz sobie tablicę typu char (char to jest 8 bitów, czyli 1 bajt).
    Żeby pobrać z takiej tablicy po prostu robisz:
    char jakisElement = char[numerElementu];
  • #9 4940044
    ed-ek
    Poziom 34  
    Posty: 1814
    Pomógł: 275
    Ocena: 42
    Mercii napisał:
    Witam
    Mam poważny problem, ponieważ dawno nie programowałem ni emoge sobie poradzić z pewnie prostym problemem.
    Muszę pobrać jakiś tekst i obcinając piwersze 3 bity z kązdego bajtu(litery) to bedzie 010 (w ascii). Zapisać to gdzieś ,np. tablica. Następnie odczytać te dane z tablicy i powstawiać barakujące bity na początek każżdego bajtu. Tzn zakowdwać jakiś tekst i pożniej móc do odkodować (zdekompresowac).
    Jest takie coś mozliwe?
    Z góry dziekuje za pomoc.

    Popraw błędy i interpunkcję. Użyj przycisku PISOWNIA -->REGULAMIN pkt 15.
    Następnym razem będzie OSTRZEŻENIE.
    Tytuł zmieniłem. [hefid]

    Ja to rozumiem tak: np litera 'a' w kodzie bin = 110001. Po obcięciu będzie '001'. To mam zapisać do nowego pliku. Czy tak? Jeżeli nie, to wytłumacz. Mogę, jeżeli to aktualne napisać taki lub podobny program.

Podsumowanie tematu

✨ Dyskusja dotyczy problemu programistycznego polegającego na obcięciu pierwszych 3 bitów z każdego bajtu tekstu ASCII, zapisaniu ich do tablicy, a następnie odczytaniu i przywróceniu tych bitów, co ma służyć jako forma prostej kompresji i dekompresji danych. Rozwiązanie opiera się na operacjach bitowych takich jak przesunięcia bitowe (shl, shr), operacje logiczne AND, XOR oraz manipulacji bajtami w tablicy znaków w języku C++. Przykład ilustruje rozdzielenie bajtu na dwie części: trzy pierwsze bity (np. dla litery 'z' o kodzie 122 dziesiętnie) oraz pozostałe 5 bitów, które są zapisywane osobno. Następnie przy odczycie trzy bity są przesuwane i łączone z pozostałymi za pomocą operacji XOR, co pozwala odtworzyć oryginalny bajt. Wskazano, że do pobrania bajtu z tablicy w C++ wystarczy odwołać się do elementu tablicy typu char. Podkreślono, że operacje bitowe są kluczowe do implementacji tego procesu, a autor prosił o przykłady w C++ ze względu na brak doświadczenia z bitami. Dyskusja zawiera także prośbę o wyjaśnienie algorytmu kompresji, jednak autor zaznaczył, że sam proces obcinania bitów jest jego własnym algorytmem kompresji.
Wygenerowane przez model językowy.
REKLAMA