2012-05-15 81 views
-1

使用我的一個WinForms應用程序,我需要在文本框中顯示計算機各種網絡適配器的MAC地址。在WinForms中格式化MAC地址

此代碼工作正常在獲取字符串:

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(「:」,等等等等),但我不能完全得到它。

這裏是我凌亂的方式做到這一點,但我覺得我可能會稍後會碰到一些意想不到的問題:

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

變種MAC = BitConverter.ToString(nic.GetPhysicalAddress()GetAddressBytes()。)替換( 「 - 」, 「:」);