代码之家  ›  专栏  ›  技术社区  ›  Ben

打印出mac地址

  •  3
  • Ben  · 技术社区  · 7 年前

    只是想利用 string.Format() 将系统MAC地址转换为文本格式。但它不起作用:

    byte[] MacAddr = new byte[6];
    
    // this works, but rather clumzy
    mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}",            
              MacAddr[0], MacAddr[1], MacAddr[2], MacAddr[3], MacAddr[4], MacAddr[5]);
    
    // give me index error
    mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}", MacAddr);
    

    伊迪丝1:好吧,我错了,但看起来 string.format 为…工作 this guy's case 具有 string[] 是的。

    我可以看到有一个重载方法 字符串格式 以下内容: Format(String, array<Object>[]()[]) 是的。是否可以创建某种形式的byte[],可以将其视为 array<Object>[]()[] 是吗?

    5 回复  |  直到 7 年前
        1
  •  8
  •   fubo    7 年前

    出现此错误是因为您要格式化6个项,但参数列表中只有1个项

    //6 parameters expected, only one "MacAddr" given
    mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}", MacAddr); 
    

    这是一个比你的工作方法更短的版本

    mac = string.Join("-", MacAddr.Select(x => x.ToString("X2")));
    
        2
  •  0
  •   Barr J    7 年前

    这是因为您使用6个参数指定格式,但只提供一个:

    //expected 6 parameters, provided only one
    mac = string.Format("{0:X2}-{1:X2}-{2:X2}-{3:X2}-{4:X2}-{5:X2}", MacAddr); 
    

    如果使用的是C 6.0,也可以使用字符串插值:

     //string interpolation
        mac = $"{MacAddr[0]}:X2-{MacAddr[1]}:X2-{MacAddr[2]}:X2-{MacAddr[3]}:X2-{MacAddr[4]}:X2-{MacAddr[5]}:X2"; 
    
        3
  •  0
  •   Gaurav Jalan    7 年前

    您的 string.Format() 功能,按要求需要6个参数。 你可以用 String.Join 为了更好的可读性-

    mac = string.Join("-", MacAddr.Select(x => x.ToString(":X2")));
    
        4
  •  0
  •   Toshi    7 年前

    尝试 BitConverter

    mac = BitConverter.ToString(MacAddr);
    
        5
  •  0
  •   George Helyar    7 年前

    BitConverter.ToString(byte[]) 获取所需的确切字符串,尽管MAC地址通常由冒号而不是破折号分隔。