* @function 计算CRC16校验 * * @param data * 需要计算的数组 * @return CRC16校验值 */ public static int calcCrc16(byte[] data) { return calcCrc16(data, 0, data.length); } /** * @function 计算CRC16校验 * * @param data * 需要计算的数组 * @param offset * 起始位置 * @param le...
1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器; 2.把第一个8位二进制数据 (既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器; 3.把CRC寄存器的内容右移一 位(朝低位)用0填补最高位,并检查右移后的移出位; 4.如果移出位为0:重复第3步(再次右...
steo2: 采用多项式除法: 得余数为: 1010 (即校验字段为:1010) CRC码即为1011001,1010 (逗号前为信息码,后为校验码) 代码实现:C#版: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MailSendAndReceive { public class CRC16 { #region CRCTAB 表 /// ...
*@since1.0*/publicstaticString getCRC(byte[] bytes) {//CRC寄存器全为1intCRC = 0x0000ffff;//多项式校验值intPOLYNOMIAL = 0x0000a001;inti, j;for(i = 0; i < bytes.length; i++) { CRC^= ((int) bytes[i] & 0x000000ff);for(j = 0; j < 8; j++) {if((CRC & 0x00000001) !=...
为了优化和封装CRC16校验的Java代码,我们可以将其封装成一个工具类,并提供静态方法来计算CRC16校验码。此外,我们还可以添加一些异常处理和注释来提高代码的可读性和健壮性。 以下是优化后的代码示例: java public class CRC16Util { // 预定义的多项式和初始值 private static final int POLYNOMIAL = 0x1021; //...
第一步:预置一个 16 位寄存器为 0FFFFH(全 1) ,称之为 CRC 寄存器。 第二步:把数据帧中的第一个字节的 8 位与 CRC 寄存器中的低位字节进行异或 运算,结果存回 CRC 寄存器。 第三步:将 CRC 寄存器向右移一位,最高位填以 0,最低位移出并检测。
现在我们根据CRC校验码计算规则来实现对应的java代码:核心函数是crc_parse,输入参数有7个。我们测试16位和32位的crc算法模型,来和网上的在线工具进行比较:测试字节数组为:010202 测试CRC-32算法模型和CRC-8算法模型:crc_parse(buf, 0xFFFFFFFF, 0x04C11DB7, 0xFFFFFFFF, 32, true, true);crc_parse(buf, ...
1 电脑是服务器,发送一组添加校验码的数据给传感器,传感器返回数据; 这个过程中,肯定是有rs485协议或者是modbus协议等等,把rs232转换为其他信号; 就我们公司的来说,根据设备探测器来进行协议的转换。传感器是和电脑都在一个交换机下面。由于我是做软件的,这个硬件具体的我也不是太清楚。2 crc16校验码的...
CRC16,16代表二进制数的位数,一个字节8位,两个字节16位,CRC16就是包含了16位的二进制值。以此类推,CRC32,则是包含32位的二进制值。在java.util.zip包中有CRC32算法的实现,主要用于压缩包工具软件的校验。 看到了没,如果还没有用到CRC校验,这说明写的代码还不够底层呀。
上述代码实现了一个CRC16校验的工具类CRCUtil。其中,calculateCRC16方法接受一个byte数组作为输入,返回CRC16校验值。具体实现过程如下: 初始化crc为0xFFFF,即16位全1。 对输入数据的每个字节进行处理: 将crc与当前字节进行异或运算。 对crc进行8次迭代运算,每次判断最低位是否为1,如果是,则右移一位并与CRC16_POL...