Operacje na bitach

0

Jakie są funkcje operujące na pojedyńczych bitach ? Chodzi mi o np zamiane kolejności (swap) dla 8, 16, 32 bitowych liczb. Albo czy istnieje możliwość odczytu z pliku pojedyńczych bitów ?

P.S. Ma ktoś może algorytm kompresji/dekompresji LZW, odczytu plików tiff .... i inne rzeczy z tifami związane ?

z góry dziękuje za odpowiedź

0

Odczyt bitów z plików --> TBitStream Dryobatesa.
Operacje bitowe przeprowadza sie operatorami np. AND, OR, XOR, NOT... itd. Poszukaj w helpie.

0

Zawsze też możesz użyć wstawki asm (choć w tym wypadku wystarczy za pewnoe or, xor, not, and).
Co do kompresji LZW to mam przy okzazji opisu gif. Niezawiele tego, ale może coś się da wyciągnąć.
Mam też troszkę informacji ogólnych na temat słownikowych metod kompresji. W każdym razie gotowego algorytmu jeszcze nie mam.

0

a nie wrzucił byś mi na @ ?

0

Może się przyda:

function Lo(X): Byte;

Description

In Delphi code, Lo returns the low-order Byte of the argument X as an unsigned value. X is an expression of type Integer.

function Hi(X): Byte;

Description

In Delphi code, use Hi to obtain the high-order byte of an expression of type Word or Integer.

Note: Hi treats Integer as a 16-bit value, even if it is 32-bit.

0

To jeszcze Swap można dołączyć. Zamienia starszy bajt z młodszym.
Na maila już poszło o LZW w gifach. To drugie ogólnie o kompresji na razie nie będę wysyłał (troszkę duże). Raczej ogólnie jest tam opisane.

0

a jak się sprawa ma jeśli chodzi o zapis i odczyt do pliku ? Jeśli mam przykładowo odczytywać po 3 bity z pliku ? Czy jest to możliwe ? Czy trzeba czytać cały Bajt po bajcie i dzielić potem na 3-bitowe części ?

0

a jak się sprawa ma jeśli chodzi o zapis i odczyt do pliku ? Jeśli mam przykładowo odczytywać po 3 bity z pliku ? Czy jest to możliwe ? Czy trzeba czytać cały Bajt po bajcie i dzielić potem na 3-bitowe części ?

Komputery oparte na konstrukcji intelowskiej mają pamięć podzieloną na bajty. I to właśnie jest najmniejszy możliwy fragment jaki możesz odczytać. Nie ma innego wyjścia, jak odczyt całego bajtu i dopiero potem operacje na poszczególnych bajtach. W TBitStream jest pewne bardzo proste metody zapisu pojedynczych bitów (w rzeczywistości to są one buforowane, aż będzie cały bajt). Jest tam kilka błędów, z którymi nie mogłem sobie poradzić w sposób automatyczny (trochę błędnie wskazuje rozmiar i nie można korzystać tak jak ze zwykłego TFileStream, ale nie ma wpływu na zapis i odczyt).

0

co zrobic jesli mam np w pliku zapisane cos w pojedynczych bitach i jest tych informacji powiedzmy 13. Założenie dalsze jest takie że plik ma zapisane przykładowo te 2 bajty (16 bitów). Jak teraz mając odczytane te dwa bajty wyciągnąć z nich te pojedyńcze bity i w zależności od ustawienia danego bitu (0 lub 1) przypisać np 1 w tablicy a = array [1..13] od byte;

A jak sprawa się ma gdy np będzie coś zapisane w porcjach 3 bitowych ? lub więcej np 9 bitowych ?

0

for i := 0 to 12 do
a[i+1] := (Zmienna shr i) and 1;
Czyli np. Zmienna: Word:
0001110010010111
To Tablica:
a[1]=1;
a[2]=1;
a[3]=1;
a[4]=0;
a[5]=1;
a[6]=0;
...

Od najmniej znaczącego.
A przy użyciu TBitStream to nie jest istotne w jakich porcjach zapisuje.

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