public byte[] PackData(MsgId msgId, string terminalId, byte[] data) { int pos = 0; int data_len = data.Length; byte[] arr = new byte[15 + data_len]; arr[0] = 0x7E; arr[1] = Convert.ToByte((((int)msgId) & 0xFF00) >> 8); //消息ID,低字节 arr[2] = Convert.ToByte(((int)msgId) & 0x00FF); //消息ID高字节 // 消息体长度 arr[3] = Convert.ToByte((data_len & 0xFF00) >> 8); arr[4] = Convert.ToByte(data_len & 0x00FF); //终端号码 terminalId.PadLeft(12, '0'); arr[5] = Convert.ToByte(terminalId.Substring(0 * 2, 2), 16); arr[6] = Convert.ToByte(terminalId.Substring(1 * 2, 2), 16); arr[7] = Convert.ToByte(terminalId.Substring(2 * 2, 2), 16); arr[8] = Convert.ToByte(terminalId.Substring(3 * 2, 2), 16); arr[9] = Convert.ToByte(terminalId.Substring(4 * 2, 2), 16); arr[10] = Convert.ToByte(terminalId.Substring(5 * 2, 2), 16); // 消息流水号 Int16 serialNo = ProtocolUtil.GetSerialNo(); arr[11] = Convert.ToByte((serialNo & 0xFF00) >> 8); //流水号,低字节 arr[12] = Convert.ToByte(serialNo & 0x00FF); //流水号高字节 //数据体填充 Array.Copy(data, 0, arr, 13, data_len); pos += 12 + data_len; // 校验码 arr[++pos] = ProtocolUtil.XorByByte(arr, 1, 12 + data_len); //标识位置 arr[++pos] = 0x7E; return(ProtocolUtil.Transfer(arr)); }