CRCチェック

 仕事で使う機会があったので。事前にあるデータをこれで計算して、結果をデータと共に送り、受信側でデータを同じ方法で計算して送られてきた結果と合えばデータは無事に送ることが出来た、ということらしい。計算方法は色々あるようだが、今回はCRC-16という種類だった。此処のサイトが非常にわかりやすかった。
 取りあえずProcessingで作ってみた。
//byte crcReg=new byte[16];
//byte inData
=new byte[8];
int crcReg=0xFFFF;//1
int inData=0xAA;//2 入力値

for (int i=0;i<8;i++){
int w=(crcReg^inData) & 0x0001;//3 crcRegとinDataの排他論理和を取り、最下位bitのみwに抽出
crcReg=crcReg>>1;//4 crcRegを右に1bitシフトし、crcRegに格納
if(w==1){
crcReg=crcReg^0x8408;//5 w=1であれば、crcRegと0x8408の排他論理和の結果をcrcRegに格納する
}
inData=inData>>1;//6 inDataを右に1bitシフト

println(i+1+"回目:"+hex(crcReg));
println(i+1+"回目:"+hex(inData));
println(i+1+"回目:"+hex(w));
}