2012-12-08 21 views
5
NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

    foreach (NetworkInterface item in arr) 
    { 
     PhysicalAddress mac = item.GetPhysicalAddress(); 
    } 
Ben 00 gibi bir şey görüntülemek istediğiniz oysa 00E0EE00EE00 değerini verir

: E0: EE: 00: EE: 00 ama .Net 4Mac Adresi formatı

herhangi bir fikir kullanmak gerekir ? İsterseniz

cevap

5

Sen :

string macAddStr = "00E0EE00EE00"; 
string macAddStrNew = macAddStr; 
int insertedCount = 0; 
for(int i = 2; i < macAddStr.Length; i=i+2) 
    macAddStrNew = macAddStrNew.Insert(i+insertedCount++, ":"); 

//macAddStrNew will have address 00:E0:EE:00:EE:00 
+0

: olup olmadığını kontrol etmektir ":" yalnızca bir kez Sen açıktır – user1710944

+0

farklı bir yerde her yineleme, Sabrınız için teşekkürler. – Adil

0

eklemek için dize sınıfının String.Insert yöntemi kullanabilirsiniz, siz) string.join ve Linq .Select (kullanabilirsiniz:

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

foreach (NetworkInterface item in arr) 
{ 
    PhysicalAddress mac = item.GetPhysicalAddress(); 
    string stringFormatMac = string.Join(":", mac.GetAddressBytes().Select(varByte => varByte.ToString("X2"))); 
} 

yardımcı olur Umut.

1

Böyle bir şey yapabilirsiniz:

string macAddr = "AAEEBBCCDDFF"; 
    var splitMac = SplitStringInChunks(macAddr); 

    static string SplitStringInChunks(string str) 
    { 
     for (int i = 2; i < str.Length; i += 3) 
      str = str.Insert(i, ":"); 
     return str; 
    } 
2

Bunun bir süre önce cevap verilmiştir biliyorum, ama sadece tercih edilen çözüm PhysicalAddress sınıf için yeniden kullanılabilir bir uzantısı yöntemi oluşturmak için genellikle olduğunu açıklığa kavuşturmak istedim. Basit bir veri sınıfı olduğundan ve büyük olasılıkla değişmeyeceğinden, yeniden kullanılabilirlik nedenlerinden dolayı bu daha iyidir. Lorenzo'nun örneğini kullanacağım çünkü en çok beğendiğimden, fakat hangisi sizin için uygunsa onu kullanabilirsiniz.

public static class PhysicalAddressExtensions 
{ 
    public static string ToString(this PhysicalAddress address, string separator) 
    { 
     return string.Join(separator, address.GetAddressBytes() 
              .Select(x => x.ToString("X2"))) 
    } 
} 

Şimdi sadece bu gibi bundan sonra uzatma yöntemi kullanabilirsiniz:

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

foreach (NetworkInterface item in arr) 
{ 
    PhysicalAddress mac = item.GetPhysicalAddress(); 
    string stringFormatMac = mac.ToString(":"); 
} 

PhysicalAddress.Parse sadece RAW onaltılık kabul ettiğini unutmayın veya ayrılmış değerler çizgi, eğer geri ayrıştırmak istedi bir nesneye. Ayrıştırmadan önce ayırma karakterini sıyırma önemlidir.

0

Makarayı doğrulayan ve biçimlendiren yöntem XX:XX:XX:XX:XX:XX biçiminde.

Geçerli değilse, null döndürür.

public string FormatMACAddress(string MacAddress) 
{ 
    if (string.IsNullOrEmpty(MacAddress)) return null; 

    MacAddress = MacAddress.ToUpper() 
          .Replace(" ","") 
          .Replace("-", ":") //'AA-BB-CC-11-22-33', 'AA:BB:CC:11:22:33' [17 Chars] 
          .Trim(); 

    if (!MacAddress.Contains(':') && MacAddress.Length == 12) //'AABBCC112233' [12 Chars] 
    { 
     for (int i = 2; i < MacAddress.Length; i += 3) MacAddress = MacAddress.Insert(i, ":"); 
    } 

    if (MacAddress.Length != 17) return null; //'AA:BB:CC:11:22:33' [17 Chars] 
    if (MacAddress.Count(c => c == ':') != 5) return null; 

    //Hex check here, '0-9A-F' and ':' 

    return MacAddress; 
} 

Henüz test etmedim, ancak çalışmalıyım. eklemenin bir başka onay tüm karakterlerin onaltılık değerler 0-9A-F ve koydu