Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Java/C++]Zapis bitów do pliku, Zapisywanie bitów do pliku
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Witam, mam taki problem, bo muszę string "0101" itp. przekonwertować na bity (?) i zapisać do pliku .bin. Ponoć wtedy plik mniej zajmuje. Średnio wiem o co w tym biega i nie znalazłem w internecie wartościowych treści na ten temat. Chodzi mi głównie o teoretyczne wyjaśnienie zagadnienia - implementacją zajmę się sam. Po poprawnym zapisie do pliku mają w nim być "krzaki". Taki plik powinno się także dać z powrotem przekonwertować na ów string zero-jedynkowy lub przynajmniej na pojedyncze 1 lub 0. Będę wdzięczny za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Masz zamienić tekst (obiekt String) "0101111001100101" (16 znaków; w zależności od użytego kodowania od minimum 16 bajtów do 64 bajtów) na tablicę bajtów, w tym przypadku będzie to:
  1. byte[] dane = new byte[] { 0x5e /* bity: 01011110 */, 0x65 /* bity: 01100101 */ };
Taka tablica jak widać zajmuje zaledwie 2 bajty, a jest w stanie dostarczyć dokładnie tych samych informacji.
Następnie przy odczycie z pliku *.bin, masz za zadanie zamienić taką tablicę bajtów na tekst.

Dwie funkcje podane przez @d3ut3r pozwolą Ci na konwersję pomiędzy pojedynczym bajtem, a tekstem. Jeżeli zaś chodzi o sam odczyt i zapis danych do pliku, możesz skorzystać z DataInputStreama oraz DataOutputStreama.

PS. W przypadku gdyby istniała możliwość, że ciąg wejściowy (tekst złożony ze znaków zera i jedynki) ma długość niepodzielną przez 8 musiałbyś na początku swojego pliku *.bin zapisać długość "zakodowanego" ciągu. Jest to konieczne, ponieważ dla przykładowego ciągu "00110", wynikiem będzie tablica złożona z zaledwie jednego elementu byte:
  1. byte[] dane = new byte[] { 0x6 };
Jednak po zapisie do pliku, będziesz miał tam (tutaj podane są poszczególne bity):
Kod
00000110
Ponieważ byte ma długość jednego bajtu, tj. 8 bitów.

Ten post edytował Crozin 13.11.2012, 19:40:03
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 03:47