Skocz do zawartości

Czytanie bitów


Easeful

Rekomendowane odpowiedzi

Można sobie wczytać bajt:

GML
file_bin_read_byte()

A czy można z tego bajta wyłonić 8 bitów (bo tyle ich się w nim znajduje)?

Zbyt bardzo się na tym nie znam .. no dobra praktycznie w ogóle nie wiem jak to wszystko funkcjonuje, ale się tak pytam tylko.. bo to chyba suma tych bitów jest

Odnośnik do komentarza
Udostępnij na innych stronach

readBit(wartość bajta (0-255) , który bit):

GML
var list, num, done, t;

 

num = argument0;

list = ds_list_create();

 

done = false;

while (!done) {

t = num mod 2;

ds_list_add(list,t);

if num == 0 or num == 1 then done = true;

num = num div 2;

}

 

t = ds_list_find_value(list,argument1-1);

ds_list_destroy(list);

return t;

 

Kiedyś to pisałem na własne potrzeby.

Odnośnik do komentarza
Udostępnij na innych stronach

Lol. A nie łatwej użyć operatorów bitowych? To zdaje się będzie jakoś tak:

GML (readBit)
num=argument0;

a=argument1;

num=num >> (a-1);

return num & 1;

 

Przesunięcie bitowe.

Jeśli mamy taki bajt:

01101011

I chcemy uzyskać wartość 3 bita to robimy przesunięcie bitowe o 2 w prawo i uzyskujemy:

00011010

 

No i ostatni bit z uzyskanego bajta odcytujemy robiąc bitowe AND 1. (równoważne modulo 2)

 

To też widać, że działa i to szybciej niż mod 2.

Bo jeśli mamy jakikolwiek baj:

01101011

i zrobimy AND z 1 czyli z:

00000001

To widać, że wyzerują się wszystkie początkowe bity, a ostatni zależnie od tego czy jest 1 czy 0

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...