using System.Text; namespace JiLinApp.Docking.VibrateAlarm; public class DataMessage { private byte HeadA = 0xAA; private byte HeadB = 0xAA; //(1)帧头 public int DeviceId { get; set; } //(2)设备ID public string SendIp { get; set; } //(3)原地址 public int SendPort { get; set; }//(3)原地址 public string ReceiveIp { get; set; }//(4)目标地址 public int ReceivePort { get; set; }//(4)目标地址 public byte FrameNum { get; set; }//(5)帧编号 public byte FunctionNum { get; set; }//(6)功能码 public byte DataLen { get; set; }//(7)传输数据长度 public byte[] Data { get; set; }//(8)传输数据 public byte CRC { get; set; }//(9)CRC8 public void Decode(byte[] bytes) { DeviceId = bytes[2]; SendIp = bytes[3].ToString() + "." + bytes[4].ToString() + "." + bytes[5].ToString() + "." + bytes[6].ToString(); SendPort = bytes[8] * 256 + bytes[7]; ReceiveIp = bytes[9].ToString() + "." + bytes[10].ToString() + "." + bytes[11].ToString() + "." + bytes[12].ToString(); ReceivePort = bytes[14] * 256 + bytes[13]; FrameNum = bytes[15]; FunctionNum = bytes[16]; DataLen = bytes[17]; Data = new byte[DataLen]; for (int i = 0; i < DataLen; i++) { Data[i] = bytes[18 + i]; } CRC = bytes[18 + DataLen]; } public byte[] Encode() { byte[] bytes = new byte[19 + DataLen]; bytes[0] = bytes[1] = 0xAA; bytes[2] = (byte)DeviceId; string[] strs = SendIp.Split('.'); bytes[3] = byte.Parse(strs[0]); bytes[4] = byte.Parse(strs[1]); bytes[5] = byte.Parse(strs[2]); bytes[6] = byte.Parse(strs[3]); bytes[7] = (byte)(SendPort % 256); bytes[8] = (byte)(SendPort / 256); string[] strs2 = ReceiveIp.Split('.'); bytes[9] = byte.Parse(strs2[0]); bytes[10] = byte.Parse(strs2[1]); bytes[11] = byte.Parse(strs2[2]); bytes[12] = byte.Parse(strs2[3]); bytes[13] = (byte)(ReceivePort % 256); bytes[14] = (byte)(ReceivePort / 256); bytes[15] = FrameNum; bytes[16] = FunctionNum; bytes[17] = DataLen; for (int i = 0; i < DataLen; i++) { bytes[18 + i] = Data[i]; } bytes[bytes.Length - 1] = CRC8.CRC(bytes, 0, bytes.Length - 1); return bytes; } public static string ToHexString(byte[] bytes) { if (bytes == null) return string.Empty; StringBuilder builder = new(); for (int i = 0; i < bytes.Length; i++) { builder.Append(bytes[i].ToString("X2") + " "); } return builder.ToString(); } }