【问题标题】:Printing out MAC address打印 MAC 地址
【发布时间】:2018-07-11 05:24:38
【问题描述】:

只是尝试使用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);

Edit1:好的,我错了,但似乎 string.format 适用于 this guy's casestring[]

我可以看到string.format 有一个重载方法: Format(String, array<Object>[]()[])。是否可以创建某种形式的 byte[],可以视为 array<Object>[]()[]

【问题讨论】:

  • 索引错误说明了什么?
  • "索引(从零开始)必须大于或等于零且小于参数列表的大小。"。听起来 MacAddr 被视为单个对象。不是数组?
  • 嗯,是的,第二种方法失败了,因为您指的是“参数 1”、“参数 2”等直到参数 5,但您只提供了一个参数(参数 0)。您可以改用BitConverter.ToString,否则请坚持您的第一种方法。
  • 让你错过 JavaScript 中的扩展运算符 :(

标签: c# string-formatting


【解决方案1】:

发生错误是因为您要格式化 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")));

【讨论】:

  • 谢谢,我在哪里可以找到这个select方法的参考?
  • 那是 Linq Select()
  • 谢谢。那些 LINQ 的东西对我来说看起来很新鲜。
【解决方案2】:

这是因为您指定了一个包含 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】:

    string.Format() 函数中只有 1 个参数,而根据要求需要 6 个参数。 您可以使用String.Join 获得更好的可读性 -

    mac = string.Join("-", MacAddr.Select(x => x.ToString(":X2")));
    

    【讨论】:

      【解决方案4】:

      试试BitConverter

      mac = BitConverter.ToString(MacAddr);
      

      【讨论】:

        【解决方案5】:

        BitConverter.ToString(byte[]) 得到您想要的确切字符串,尽管 MAC 地址通常用冒号分隔,而不是破折号。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-01
          • 2016-10-14
          • 2022-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多