Wpis z mikrobloga

#java #programowanie

Witam,
Czy byłby ktoś w stanie przepisać tego pastebina na jave?
To algorytm liczący CRC prawdopodobnie w c# lub c++ nie znam sie na C, w javie operacji na bitach też za wiele nie robiłem.
prawdopodobnie jest to "16 bit CRC polynom 0xA001"
  • 11
@passage: dzięki, to też znalazłem
a wiesz może o co chodzi z "polynom 0xA001" ?
z tego co wyczytałem to jest to "odwrócowny", a ten który podałeś w linku chyba nie
@jazuu: ta wersja z linku co podesłałem jest lepsza od Twojej wersji ponieważ jest wersją tablicową - znacznie szybszą. Wersja którą podałeś z reguły stosuje się podczas pisania softu na bardzo małe mikrokontrolery 8-bit aby zaoszczędzić na ramie.
do usług ( ͡° ͜ʖ ͡°)

@passage: To mam jeszcze pytania,
Ramka którą mam przesłać wygląda coś jak to [0x02, 0x04, ...,....,CRCL,CRCH,0x03 ]
1. czy do oblicznie sumy kontrolnej w miejsce CRCL, CRCH wstawiam 0x00?
2. po wyliczeniu CRC młodszych 8 bitów wstawiam do CRCL a starsze do CRCH?
3. jak je wycciągnąć i podzielić na CRCL i CRCH
@jazuu:
1. CRC liczysz w zależności od typu protokołu, zwykle są to wszystkie bajty ramki
2. tak
3.

byte CRCL = (byte)CRC;
byte CRCH = (byte)(CRC >> 8);

Przy okazji, crc jest tak zaprojektowany, że obliczenie crc z całej ramki danych (razem z crc w ramce) daje wynik 0. Jest to wygodne podczas sprawdzania danych przy odbiorze :)