开发板对接之字节和校验

在于开发板对接的java开发时开发给来的都是无符号的字节这时候一般有很多校验方式,比较简单的就是和校验.所谓和校验就是把所有接收到的字节数相加,作为最后一位.,以此来检验这组数据是否为对的数据,好做判断.
现在分两个方面来说
一.对接收到的数据进行校验
接收到的数据进行和检验:接收到的数据有规定和校验位(一般定位最后一位为和检验位,这里要根据你们自己规定的),我这里规定最后一位位和检验位,规定
和检验数值 = 和检验位之前的数据之和()
那么代码如下:

/**
     * 和校验
     * SUM(cmd, Length, Data0…DataN)^0xFF
     * */
    public static boolean getCheckSum(byte[] packBytes){
        int checkSum = 0;
        for (int i = 0; i < packBytes.length-1; i++) {
            checkSum += packBytes[i];//计算和校验
        }
        checkSum &= 0xff; //取低八位
        return (byte)checkSum == packBytes[ packBytes.length-1];//比对给到的数据真实性
    }

二.向设备发送字节数据

/**
     * 和校验
     * SUM(cmd, Length, Data0…DataN)^0xFF
     * */
    public static byte[] getCheckSum(byte[] packBytes){
        int checkSum = 0;
        for (int i = 0; i < packBytes.length-1; i++) {
            checkSum += packBytes[i];//计算和校验
        }
        checkSum &= 0xff; //取低八位  
      byte[] send  = Arrays.copyOf(packBytes, packBytes.length+ 1);
send[send.length-1] =(byte)checkSum 
        return send;
    }

三.二合一写法:只给出和的算法

/**
     * 和校验
     * SUM(cmd, Length, Data0…DataN)^0xFF
    *这里的byte数组如果是接收过来的数据就用 Arrays.copyOf()复制长度-1作为参数 得到的结果跟最后一位比较即可.这个方法只是求和检验位的.不是发送的byte[].
     * */
    public static byte getCheckSum(byte[] packBytes){
        int checkSum = 0;
        for (int i = 0; i < packBytes.length-1; i++) {
            checkSum += packBytes[i];//计算和校验
        }
        checkSum &= 0xff; //取低八位  
        return  (byte)checkSum ;
    }

你可能感兴趣的:(开发板对接之字节和校验)