Beispiel #1
0
        /// <summary>
        /// 校验数据是否合法
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public static bool CheckData(byte[] buffer)
        {
            Console.WriteLine();
            StringBuilder sb  = new StringBuilder();
            byte          SOF = buffer[0];
            //length 是出去SOF 和EOF 的总长度
            int  length = Convert.ToInt32(buffer[1]);
            byte EOF    = buffer[length + 1];

            //判断结束位
            if (EOF != 0x3F)
            {
                return(false);
            }
            byte[] sourceCRC = new byte[2];
            //获取CRC 字节
            Buffer.BlockCopy(buffer, length - 1, sourceCRC, 0, 2);
            //判断CRC ,长度为出去 BOF 和 EOF ,CRC
            byte[] CRCbyte = new byte[length - 2];
            Buffer.BlockCopy(buffer, 1, CRCbyte, 0, length - 2);

            //转出的CRC 始终是低位到高位,于C代码中高位到低位相反
            var convertCRC = BitConverter.GetBytes(CRC.CCITT_CRC16(CRCbyte));

            if (convertCRC[1] == sourceCRC[0] && convertCRC[0] == sourceCRC[1])
            {
                return(true);
            }
            return(false);
        }
Beispiel #2
0
 /// <summary>
 /// 发送事件片数据
 /// </summary>
 /// <param name="buffer"></param>
 /// <param name="callNumber"></param>
 /// <returns></returns>
 public static byte[] GetTagID(byte[] buffer, int callNumber)
 {
     byte[] command = new byte[16];
     command[0] = 0x3E;
     command[1] = 0x0c + 1;
     command[2] = 0xA9;
     //复制基站ID 和 标签ID
     for (int i = 3; i <= 10; i++)
     {
         command[i] = buffer[i];
     }
     command[11] = 0x30;
     command[12] = (byte)callNumber;
     byte[] crc = new byte[command.Length - 4];
     Buffer.BlockCopy(command, 1, crc, 0, command.Length - 4);
     byte[] convertCrc = BitConverter.GetBytes(CRC.CCITT_CRC16(crc));
     //颠倒高低位
     command[13] = convertCrc[1];
     command[14] = convertCrc[0];
     command[15] = 0x3F;
     return(command);
 }