Sprawdzanie kolejnych bitow

0

WItam

dostaje zakodowana informacje o stanie urzadzenia w postaci ciagu bitow
pytanie moje brzmi:
<B>jak sprawdzic po ktore bity maja wartosc 1 a ktore 0?</b>
moj pomysl to zaladowac te bity do odpowiedzniej dlugosci tablicy </b>byte</b>
i dalej:

  var
    bity: array[0..26] of boolean; 
    tab: array[0..3] of byte;
    i: integer;
begin
  ApdComPort1.GetBlock(tab,count); // odebranie danych - nie istotne dla problemu
  for i := 1 to 4 do begin
    if tab[i] and 1   = 1   then bity[i*8 + 0] := true;
    if tab[i] and 2   = 2   then bity[i*8 + 1] := true;
    if tab[i] and 4   = 4   then bity[i*8 + 2] := true;
    if tab[i] and 8   = 8   then bity[i*8 + 3] := true;
    if tab[i] and 16  = 16  then bity[i*8 + 4] := true;
    if tab[i] and 32  = 32  then bity[i*8 + 5] := true;
    if tab[i] and 64  = 64  then bity[i*8 + 6] := true;
    if tab[i] and 128 = 128 then bity[i*8 + 7] := true;
  end;
end;

no i mam po tym tablice z bity z wartosciami true
jesli bit byl '1'

no ale wydaje mi sie to niezbyt sprytne rozwiazanie...
czy ktos ma jakis pomysl jak to lepeij rozwiazac?
w tym przypadku mam akurat 27 bitow ale ta ilosc bedzie sie zmieniac.

pozdrawiam
i czekam na Wasze pomysly

0
type TStan = array[0..15] of boolean;
var Stan   : TStan;
    Liczba : Word;

procedure SprawdzStanBitow(Liczba16bit:Word; var StanBitow:TStan);
var i:integer;
begin
for i:=0 to 15 do
  StanBitow[i]:=(Liczba16bit and (1 shl i)>0);
end;

begin
Liczba:=$85A7;
SprawdzStanBitow(Liczba, Stan);
//Wyniki w stablicy Stan
end;
0
var
 i, j :Byte;
 Mask :Word;
 Bits :array [0..3, 0..7] of Boolean;
 Val  :array [0..3] of Byte;

begin
  { TODO -oUser -cConsole Main : Insert code here }
 for j := 0 to 3 do
   for i := 0 to 7 do
     begin
       Mask := $01 shl i;
       Bits[j, 7-i] := (Val[j] and Mask = Mask);
     end;
end.

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