using System; using System.Globalization; namespace ln.type { public class MAC : IComparable { readonly byte[] mac; public byte[] Bytes => mac.Slice(0); public MAC() { mac = new byte[6]; } public MAC(byte[] macBytes) :this() { if (macBytes.Length != 6) throw new ArgumentOutOfRangeException(nameof(macBytes), "MAC bytes need to be exactly 6 bytes"); Array.Copy(macBytes, 0, this.mac, 0, 6); } public MAC(string smac) :this() { string[] sbytes = null; if (smac.Contains(":")) sbytes = smac.Split(':'); else sbytes = smac.Split('-'); if (sbytes.Length != 6) throw new ArgumentException(nameof(smac), "MAC needs 6 bytes"); for (int n = 0; n < 6; n++) mac[n] = Convert.ToByte(sbytes[n], 16); } public override string ToString() { return BitConverter.ToString(mac); } public override int GetHashCode() { int hash = 0; foreach (byte mb in mac) hash = (hash << 16) ^ mb; return hash; } public override bool Equals(object obj) { if (obj is MAC) { return mac.AreEqual((obj as MAC).mac); } return false; } public int CompareTo(MAC other) { for (int n=0;n<6;n++) { int d = mac[n] - other.mac[n]; if (d != 0) return d; } return 0; } } }