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

    foreach (NetworkInterface item in arr) 
    { 
     PhysicalAddress mac = item.GetPhysicalAddress(); 
    } 

Zwraca wartość 00E0EE00EE00 natomiast chcę go wyświetlić coś podobnego 00: E0: EE: 00: EE: 00, ale trzeba użyć Net 4Mac format adresu z ciągiem

jakieś pomysły ?

Odpowiedz

5

Można użyć String.Insert metodę klasy string dodać :

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

to jest wstawiane ":" tylko raz w każdej iteracji w innym miejscu – user1710944

+0

Serdecznie witamy, dzięki za cierpliwość. – Adil

0

Jeśli chcesz, możesz użyć string.join i LINQ .Wybrać():

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

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

Nadzieję, że to pomaga.

1

można zrobić coś takiego:

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

Znam ten odpowiedział jakiś czas temu, ale ja po prostu chciałem wyjaśnić, że preferowanym rozwiązaniem jest zwykle do tworzenia wielokrotnego użytku metodę rozszerzenia dla klasy PhysicalAddress. Ponieważ jest to prosta klasa danych i prawdopodobnie nie ulegnie zmianie, jest to lepsze ze względu na możliwość ponownego użycia. Użyję przykładu Lorenzo, ponieważ lubię go najbardziej, ale możesz użyć dowolnej rutyny.

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

Teraz możesz po prostu użyć metody rozszerzenie od teraz tak:

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

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

Pamiętaj, że PhysicalAddress.Parse akceptuje tylko RAW hex lub kreska oddzielone wartości, w przypadku, gdy chciał analizować go z powrotem do obiektu. Więc usuwanie postaci separatora przed analizą jest ważne.

0

Metoda sprawdzania poprawności i formatowania formatu mac na format XX:XX:XX:XX:XX:XX.

Zwraca null jeśli jest nieważna.

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; 
} 

Nie testowałem jeszcze tego, ale powinno działać. Innym sprawdzeniem, które należy dodać, jest sprawdzenie, czy wszystkie znaki są wartościami heksadecymalnymi: 0-9A-F i :