束后R即为FCS。Р(3)将R左移1位,并将b添加到R的最低位,判断R的最高位,如果是0,则继续(3),如果是1,则将R和P进行按位与操作,结果保存到R中。Р图5.4.1 CRC流程图Р相应的流程图如图5.4.1所示,其实现如下,其中curByte为一个字节,currentR为从开始到现在已经循环计算所得的余数。Рpublic static int nextR(int currentR, int curByte) {Р int mask = 0X80;Р int curBit = 0;Р for (int i = 0; i < 8; ++i, mask >>= 1) {Р // 计算当前位,0或者1Р curBit = (curByte & mask) == 0 ? 0X0 : 0X1;Р // 首先将余数左移1位,并把当前位添加到余数的最低位Р currentR <<= 1;Р currentR += curBit;Р // 判断余数最高位是否为0Р // 若为1,则将除数和余数进行异或操作,将结果保存为余数Р if ((currentR & MASK_HIGH) != 0) {Р currentR = currentR ^ P;Р }Р }Р return currentR;Р?}Р源代码Рimport java.io.File;Рimport java.io.FileInputStream;Рimport java.io.FileOutputStream;Рimport java.io.IOException;Рimport java.io.InputStream;Рimport java.io.OutputStream;Рimport java.util.LinkedList;Рimport java.util.List;Рpublic class framer {