public override void SetData(byte[] data, int startIndex, int len) { CheckData(data, startIndex, len); Array.Copy(data, startIndex, InsideData, 0, 3); int addrValueIndex = startIndex + 3; // 初始化中继地址列表 if (RouteAddrList == null) { RouteAddrList = new List <NetAddr>(); } RouteAddrList.Clear(); for (int i = 0; i < RouteNodeNum; i++) { // 获取第i个中继地址模式 var emLen = (EmAddrLen)InsideData.GetBits(10 + 2 * i, 2); NetAddr addr = new NetAddr() { AddrMode = emLen }; int addrLen = emLen == EmAddrLen.Two ? 2 : 6; addr.Value = new byte[addrLen]; if (addrValueIndex + addrLen > len) { throw new ArgumentOutOfRangeException("len", "len的长度不够"); } addr.SetData(data, addrValueIndex, addrLen); addrValueIndex += addrLen; RouteAddrList.Add(addr); } }
/// <summary> /// 中继列表地址模式变动后 更新中继列表 /// </summary> private void UpdateAddrList() { RouteAddrList.Clear(); for (int i = 0; i < RouteNodeNum; i++) { // 获取第i个中继地址模式 var emLen = (EmAddrLen)InsideData.GetBits(10 + 2 * i, 2); NetAddr addr = new NetAddr(); addr.AddrMode = emLen; RouteAddrList.Add(addr); } }