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

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

es den Wert von 00E0EE00EE00 zurück, während ich ihm etwas will wie 00 angezeigt werden: E0: EE: 00: EE: 00, aber ich brauche .Net 4Mac Address-Format von String

Ideen zu verwenden, ?

Antwort

5

Sie String.Insert Methode der String-Klasse verwenden können :

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

das ist ":" nur einmal pro Iteration an anderer Stelle – user1710944

+0

Sie sind herzlich eingeladen, Vielen Dank für Ihre Geduld. – Adil

0

hinzufügen Wenn Sie möchten, können Sie string.Join und Linq .Select() verwenden:

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

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

Hoffe, es hilft.

1

Sie können etwas tun:

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

Ich weiß, das vor einiger Zeit beantwortet wurde, aber ich wollte nur klarstellen, dass die bevorzugte Lösung in der Regel eine wieder verwendbare Erweiterungsmethode für die Physical Klasse zu schaffen. Da es sich um eine einfache Datenklasse handelt, die sich wahrscheinlich nicht ändert, ist dies aus Gründen der Wiederverwendbarkeit besser. Ich werde Lorenzos Beispiel verwenden, weil ich es am meisten mag, aber Sie können die Routine verwenden, die Ihnen passt.

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

Jetzt können Sie nur ab sofort wie folgt die Erweiterungsmethode verwenden:

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

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

Denken Sie daran, dass die PhysicalAddress.Parse nur das RAW-hex annimmt oder getrennte Werte dash, falls wollten Sie es zurück analysieren in ein Objekt. Daher ist es wichtig, das Trennzeichen vor dem Parsen zu entfernen.

0

Methode, die validieren und formatiert mac zu XX:XX:XX:XX:XX:XX formatieren.

Gibt null zurück, wenn es nicht gültig ist.

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

Ich habe dies noch nicht getestet, sollte aber funktionieren. Ein weiterer Check zum Hinzufügen besteht darin, zu überprüfen, ob alle Zeichen Hex-Werte sind 0-9A-F und :

Verwandte Themen