![]() |
![]() |
![]() ![]()
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.
|
|
|
![]() |
![]()
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:
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: 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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 03:47 |