-1

WinForms アプリケーションの 1 つを使用して、コンピューターのさまざまなネットワーク アダプターの 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(":", 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;
}

私が見逃しているよりクリーンなソリューションはありますか?

4

2 に答える 2

1

PhysicalAddress個々のバイトを取得して文字列に結合することにより、必要に応じてインスタンスをフォーマットできます。

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

このアプローチを機能させる.ToString()には、元のクエリでを省略してください。また、.NET 4を使用している場合は、最後のを省略できます.ToArray()

于 2012-05-15T16:37:13.673 に答える
0

最も簡単な方法: BitConverter を使用する

var mac = BitConverter.ToString(nic.GetPhysicalAddress().GetAddressBytes()).Replace("-", ":");

于 2012-11-30T16:37:52.210 に答える