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 :)
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 :)
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ć ;)
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])
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)
dzieki za wyjasnienia ;)
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);
wielkie dzieki ;)
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);
Nie Word tylko LongWord, lub po prostu Integer, bo crc_accum ma przynajmniej 32 bity, skoro przesuwamy 24