在 C# 中格式化 MAC 地址

Posted

技术标签:

【中文标题】在 C# 中格式化 MAC 地址【英文标题】:Formatting MAC address in C# 【发布时间】:2011-11-15 02:24:44 【问题描述】:

在我的 C# 应用程序中,我想通过使用 NetworkInterface 类来获取我的 MAC 地址,如下所示:

NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()

    mac = nic.GetPhysicalAddress()

但此代码返回的 MAC 不带 ':' 或任何其他分隔符。

如何以这种格式检索 MAC: 88:88:88:88:87:88 只使用上面的代码吗?

【问题讨论】:

“只使用上面的代码”?如果它没有返回带有任何分隔符的 MAC 地址......你不能只使用它。 我想格式化它。你知道怎么做吗? @gln - 检查我在哪里格式化了 mac 地址 【参考方案1】:

试试

mac = string.Join (":", (from z in nic.GetPhysicalAddress().GetAddressBytes() select z.ToString ("X2")).ToArray());

【讨论】:

在 .NET 4 中它可以更短mac = string.Join (":", nic.GetPhysicalAddress().GetAddressBytes().Select(b => b.ToString("X2"))); 或:mac = string.Join (":", Array.ConvertAll(nic.GetPhysicalAddress().GetAddressBytes(), b => b.ToString("X2")));【参考方案2】:

该命令的帮助显示了一种方式:

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.physicaladdress.aspx

    PhysicalAddress address = adapter.GetPhysicalAddress();
    byte[] bytes = address.GetAddressBytes();
    for(int i = 0; i< bytes.Length; i++)
    
        // Display the physical address in hexadecimal.
        Console.Write("0", bytes[i].ToString("X2"));
        // Insert a hyphen after each byte, unless we are at the end of the 
        // address.
        if (i != bytes.Length -1)
        
             Console.Write("-");
        
    
    Console.WriteLine();

【讨论】:

这可以做得更短:BitConverter.ToString(byte[]) 正是这种格式。 @eFloh:将其发布为答案。 @BoltClock:这已经在下面链接的帖子中,仅适用于该帖子,因为它不会产生请求的输出。请参阅this answer to Getting MAC Address C# 以获得实际响应。【参考方案3】:

使用comment by eFloh 来使用BitConverter 我能够执行以下操作(假设mac 被预定义为字符串)。

foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())

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

    //Do whatever else necessary with each mac...

【讨论】:

【参考方案4】:

试试这样的:

// Insert Colons on MAC
string MACwithColons = "";
for (int i = 0; i < MAC.Length; i++) 
  MACwithColons = MACwithColons + MAC.Substring(i, 2) + ":";
  i++;

MACwithColons = MACwithColons.Substring(0, MACwithColons.Length - 1); // Remove the last colon

【讨论】:

【参考方案5】:

你想在哪里展示,你必须这样做:

txtMac.text=getFormatMac(GetMacAddress());
public string GetMacAddress()


    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
    String sMacAddress = string.Empty;
    foreach (NetworkInterface adapter in nics)
    
         if (sMacAddress == String.Empty)// solo retorna la mac de la primera tarjeta
         
              IPInterfaceProperties properties = adapter.GetIPProperties();
              sMacAddress = adapter.GetPhysicalAddress().ToString();
          
    
    return sMacAddress;


public string getFormatMac(string sMacAddress)

    string MACwithColons = "";
    for (int i = 0; i < macName.Length; i++)
    
        MACwithColons = MACwithColons + macName.Substring(i, 2) + ":";
        i++;
    
    MACwithColons = MACwithColons.Substring(0, MACwithColons.Length - 1);

    return MACwithColons;

【讨论】:

以上是关于在 C# 中格式化 MAC 地址的主要内容,如果未能解决你的问题,请参考以下文章

MAC地址格式详解

以太网的MAC帧格式

以太网MAC层帧格式

以太网MAC帧格式

mac帧格式

以太网帧格式是啥?