6
    NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces();

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

它返回 00E0EE00EE00 的值,而我希望它显示类似 00:E0:EE:00:EE:00 但我需要使用.Net 4

有任何想法吗 ?

4

5 回答 5

5

您可以使用字符串类的String.Insert方法添加:

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
于 2012-12-08T06:17:14.413 回答
3

我知道这已在不久前得到回答,但我只是想澄清一下,首选的解决方案通常是为 PhysicalAddress 类创建一个可重用的扩展方法。由于它是一个简单的数据类,并且很可能不会更改,因此出于可重用性的原因,这样做会更好。我将使用 Lorenzo 的示例,因为我最喜欢它,但是您可以使用任何适合您的例程。

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

现在你可以像这样使用扩展方法:

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces();

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

请记住,PhysicalAddress.Parse仅接受 RAW 十六进制或破折号分隔值,以防您想将其解析回对象。因此,在解析之前剥离分隔符很重要。

于 2014-11-20T15:16:51.883 回答
1

你可以这样做:

    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;
    }
于 2014-03-13T08:32:29.660 回答
0

如果需要,可以使用 string.Join 和 Linq .Select():

NetworkInterface[] arr = NetworkInterface.GetAllNetworkInterfaces();

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

希望能帮助到你。

于 2014-03-13T08:17:13.487 回答
0

验证和格式化 mac 以XX:XX:XX:XX:XX:XX格式化的方法。

null如果无效则返回。

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

我还没有对此进行测试,但应该可以。另一个要添加的检查是检查所有字符是否都是十六进制值0-9A-F:

于 2017-06-30T07:39:44.560 回答