-1

使用我的 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(":", 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 回答