美文网首页
开发板对接之字节和校验

开发板对接之字节和校验

作者: 27岁未成年 | 来源:发表于2018-09-19 16:14 被阅读0次

    在于开发板对接的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 ;
        }
    

    相关文章

      网友评论

          本文标题:开发板对接之字节和校验

          本文链接:https://www.haomeiwen.com/subject/vbobnftx.html