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

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

Restituisce il valore di 00E0EE00EE00 mentre io voglio per visualizzare qualcosa come 00: E0: EE: 00: EE: 00 ma ho bisogno di utilizzare .Net 4Mac Formato indirizzo da stringa

tutte le idee ?

risposta

5

È possibile utilizzare String.Insert metodo della classe stringa da aggiungere :

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

che è messo ":" solo una volta ogni iterazione in luogo diverso – user1710944

+0

Siete i benvenuti, grazie per essere pazienti. – Adil

0

Se si desidera, è possibile utilizzare string.join e Linq .Selezionare():

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

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

Speranza che aiuta.

1

si può fare qualcosa di simile:

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

So che questo è stato risposto qualche tempo fa, ma volevo solo chiarire che la soluzione preferita è di solito per creare un metodo di estensione riutilizzabile per la classe PhysicalAddress. Dato che si tratta di una semplice classe di dati, e probabilmente non cambierà, è meglio per motivi di riusabilità. Userò l'esempio di Lorenzo perché mi piace di più, ma puoi usare qualsiasi routine ti si addica.

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

Ora si può semplicemente utilizzare il metodo di estensione d'ora in poi in questo modo:

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces(); 

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

ricordare che l'PhysicalAddress.Parse accetta solo l'esagono RAW o un trattino valori separati, nel caso in cui si volesse analizzare indietro in un oggetto. Quindi rimuovere il carattere separatore prima di analizzare è importante.

0

Metodo che convalida e formatta il mac nel formato XX:XX:XX:XX:XX:XX.

Restituisce null se non è valido.

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

Non ho ancora provato questo, ma dovrebbe funzionare. Un altro controllo da aggiungere è per verificare se tutti i caratteri sono esadecimali 0-9A-F e :