2012-05-15 1 views
-1

Используя одно из моих приложений WinForms, мне нужно отобразить MAC-адрес различных сетевых адаптеров компьютера в текстовом поле.Формирование MAC-адреса в WinForms

Этот код прекрасно работает в получении строки:

public string AdapterAddress(string criteria) 
{ 
    adapteraddress = (from nic in NetworkInterface.GetAllNetworkInterfaces() 
         where nic.Name == criteria 
         select nic.GetPhysicalAddress().ToString() 
         ).First(); 
    return adapteraddress; 
} 

, но он выводит в

003E4B880D01 

в отличие от

00:3E:4B:88:0D:01 

Я хотел бы, если бы я мог бы использовать это непосредственно для командной строки «ipconfig/all»

Я знаю, что мне нужно что-то сделать, взяв отдельные байты, а затем присоединяя их к String.Join (":", blah blah), но я не могу это получить.

Вот мой грязный способ сделать это, но я чувствую, что я мог бы столкнуться с некоторыми неожиданными проблемами с этим позже:

public string AdapterAddress(string criteria) 
{ 
    adapteraddress = (from nic in NetworkInterface.GetAllNetworkInterfaces() 
         where nic.Name == criteria 
         select nic.GetPhysicalAddress().ToString() 
         ).First(); 

    var tempaddress = SplitMacAddress(adapteraddress); 
    adapteraddress = tempaddress; 
    return adapteraddress; 
} 

public string SplitMacAddress(string macadress) 
{ 
    for (int Idx = 2; Idx <= 15; Idx += 3) 
    { 
     macadress = macadress.Insert(Idx, ":"); 
    } 
    return macadress; 
} 

Есть чистое решение, что я не хватает?

+3

Как раз на наименовании я бы не назвал функцию «SplitMacAddress». Это означает, что вы возвращаете отдельные биты. Лучшее имя может быть «FormatMacAddress». :) Извините, но я не могу помочь в реальной проблеме. –

+1

Что именно не так с вашим методом? Что не так с '003E4B880D01', потому что это фактическое значение. Значение на самом деле не '00: 3E: 4B: 88: 0D: 01', это просто красивая печать для нас, людей. –

+0

Итерирование кажется излишним, и я хотел бы добавить некоторые проверки позже, если бы я мог сделать все это в одной области, я чувствую, что он становится намного более пригодным для повторного использования. –

ответ

1

Вы можете отформатировать PhysicalAddress экземпляр как хотелось бы, принимая отдельные байты и присоединиться к ним в строке:

string formattedAddress = String.Join(":", 
    adapteraddress.GetAddressBytes() 
     .Select(b => b.ToString("X2")) 
     .ToArray() 
    ); 

Обратите внимание, что вы должны оставить вне .ToString() в исходном запросе для такой подход к работе. Кроме того, если вы на .NET 4, вы можете оставить окончательный .ToArray().

+0

приятное решение, спасибо –

0

Самый простой способ: использовать BitConverter

уаг макинтош = BitConverter.ToString (nic.GetPhysicalAddress() GetAddressBytes().) Заменить ("-", ":").