예제 #1
0
        /// <summary>
        /// 二进制数据 转成 内容包数据
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public JT808_PackageData Bytes2PackageData(byte[] data)
        {
            JT808_PackageData ret = new JT808_PackageData();

            // 1. 16byte 或 12byte 消息头
            JT808_PackageData.MsgHeader msgHeader = this.ParseMsgHeaderFromBytes(data);
            ret.msgHeader = msgHeader;

            int msgBodyByteStartIndex = 12 + 1;

            // 2. 消息体
            // 有子包信息,消息体起始字节后移四个字节:消息包总数(word(16))+包序号(word(16))
            if (msgHeader.hasSubPackage)
            {
                msgBodyByteStartIndex = 16 + 1;
            }

            byte[] tmp = new byte[msgHeader.msgBodyLength];
            Buffer.BlockCopy(data, msgBodyByteStartIndex, tmp, 0, tmp.Length);
            ret.setMsgBodyBytes(tmp);

            // 3. 去掉分隔符之后,最后一位就是校验码
            int checkSumInPkg      = data[data.Length - 1 - 1];
            int calculatedCheckSum = ExplainUtils.getCheckSum4JT808(data, 0 + 1, data.Length - 1 - 1);

            ret.checkSum = (checkSumInPkg);
            if (checkSumInPkg != calculatedCheckSum)
            {
                ret.errorlog = ret.errorlog + "检验码不一致;";// string.Format("检验码不一致,msgid:{},pkg:{},calculated:{}", msgHeader.getMsgId(), checkSumInPkg, calculatedCheckSum);
            }
            return(ret);
        }