Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Globalization;
- using System.Text;
- using System.Text.RegularExpressions;
- namespace gist.yifeitao.com
- {
- [Serializable]
- public class Mac
- {
- private readonly byte[] _address = new byte[6];
- /// <summary>
- /// use byte array to construct
- /// </summary>
- /// <param name="address">a byte array(length==6)</param>
- public Mac(byte[] address)
- {
- if (address.Length != 6)
- {
- throw new ArgumentException("address.Length != 6");
- }
- Array.Copy(address, _address, 6);
- }
- /// <summary>
- /// get a copy of address in bytes
- /// </summary>
- /// <returns></returns>
- public byte[] GetAddressBytesCopy()
- {
- byte[] copy = new byte[6];
- Array.Copy(_address,copy,6);
- return copy;
- }
- /// <summary>
- /// Parse a string to mac
- /// </summary>
- /// <param name="s">a string looks like "XX-XX-XX-XX-XX-XX"</param>
- /// <returns>Mac address</returns>
- public static Mac Parse(string s)
- {
- Regex regex = new Regex("[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]");
- if (!regex.IsMatch(s)) throw new ArgumentException("the string can't mactch XX-XX-XX-XX-XX-XX");
- var address = ParesAddressBytes(s);
- return new Mac(address);
- }
- private static byte[] ParesAddressBytes(string s)
- {
- byte[] address = new byte[6];
- string[] addrStrings = s.Split('-');
- for (int i = 0; i < 6; i++)
- {
- address[i] = byte.Parse(addrStrings[i], NumberStyles.HexNumber);
- }
- return address;
- }
- public bool TryParse(string s, out Mac mac)
- {
- Regex regex = new Regex("[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]-[0-9A-F][0-9A-F]");
- mac = null;
- if (!regex.IsMatch(s)) return false;
- var address = ParesAddressBytes(s);
- mac = new Mac(address);
- return true;
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append(_address[0].ToString("X2"));
- sb.Append("-");
- sb.Append(_address[1].ToString("X2"));
- sb.Append("-");
- sb.Append(_address[2].ToString("X2"));
- sb.Append("-");
- sb.Append(_address[3].ToString("X2"));
- sb.Append("-");
- sb.Append(_address[4].ToString("X2"));
- sb.Append("-");
- sb.Append(_address[5].ToString("X2"));
- return sb.ToString();
- }
- public override bool Equals(object obj)
- {
- if (!(obj is Mac))
- {
- return false;
- }
- byte[] bytes1 = GetAddressBytesCopy();
- byte[] bytes2 = ((Mac) obj).GetAddressBytesCopy();
- for (int i = 0; i < 6; i++)
- {
- if (bytes1[i] != bytes2[i])
- return false;
- }
- return true;
- }
- public override int GetHashCode()
- {
- return ((_address[0] << 40) & (_address[1] << 32) & (_address[2] << 24)
- & (_address[3] << 16) & (_address[4] << 8) & _address[5])
- .GetHashCode();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement