Czy ktos mi to przedlozy na pascala :)

0

unsigned char *data_blk_ptr - przynajmniej jak to rozumiec, tlumaczac to na pascala :)
i = ((unsigned int)(crc_accum >> 24) ^ *data_blk_ptr++) & 0xff; - i to...

dziekuje dobrej duszy :)

0

unsigned char to char bez znaku, czyli przyjmuje większe, bo nieujemne wartości, czyli chyba od 0 do 255. Czyli w Delphi to byłoby BYTE. A ta gwiazdka oznacza, że to będzie nieskończona tablica takich znaków (jeśli się mylę, to można mnie poprawić ;) ). Nad tym drugim musiałbym się dłużej zastanowić ;)

0
Spine napisał(a)

unsigned char to char bez znaku, czyli przyjmuje większe, bo nieujemne wartości, czyli chyba od 0 do 255. Czyli w Delphi to byłoby BYTE. A ta gwiazdka oznacza, że to będzie nieskończona tablica takich znaków (jeśli się mylę, to można mnie poprawić ;) ). Nad tym drugim musiałbym się dłużej zastanowić ;)

jesli to pierwsze moze byc nieskonczona tablica, to moze by to mozna porownac od zmiennej typu string w delphi? chyba ze jest odpowiednik tego typu char w delphi... bo kazdy znak w ciagu string mozna by przekonwertowac do char - char(s[i])

0

To drugie to
i = ((unsigned int)(crc_accum >> 24) ^ *data_blk_ptr++) & 0xff

crc_accum>> 24 - przesuwasz 24 bity w prawo
^ *data_blk_ptr++ - xor'ujesz z wartoscia wskazywana przez data_blk_ptr przy okazji przesuwajac go o jedno miejsce w przod po tejze operacji
(unsigned int) - konwertujesz na liczbe calkowita bez znaku (czyli dodatnia)
i na koniec
& 0xff czyli and z 255 - innymi slowy zerujesz wszystkie bity z wyjatkiem pierwszych 8

A to pierwsze rzeczywiscie mozna potraktowac jako tablice znakow (przy zalozeniu, ze znaki zapisywane sa jako wartosci 0-255)

0

dzieki za wyjasnienia ;)

0

Jakoś tak to będzie.

var
  data_blk_ptr :PChar;
  i, crc_accum :Word;

i := (Word(crc_accum shr 24) xor Integer(data_blk_ptr^)) and $FF;
Inc(data_blk_ptr);

// lub

var
  data_blk_ptr    :string;
  i, j, crc_accum :Word;

i := (Word(crc_accum shr 24) xor Ord(data_blk_ptr[j])) and $FF;
Inc(j);
0

wielkie dzieki ;)

0
Oleksy_Adam napisał(a)

Jakoś tak to będzie.

var
  data_blk_ptr :PChar;
  i, crc_accum :Word;

i := (Word(crc_accum shr 24) xor Integer(data_blk_ptr^)) and $FF;     // - na pewno tu integer, a nie byte?
Inc(data_blk_ptr);

// lub

var
  data_blk_ptr    :string;
  i, j, crc_accum :Word;

i := (Word(crc_accum shr 24) xor Ord(data_blk_ptr[j])) and $FF;
Inc(j);
0

Nie Word tylko LongWord, lub po prostu Integer, bo crc_accum ma przynajmniej 32 bity, skoro przesuwamy 24

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