打印MAC地址

3

我试图使用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 可以适用于这个人使用string[] 的情况

我注意到 string.format 有一个重载方法:Format(String, array<Object>[]()[])。是否可能创建一些形式的 byte[],将其作为 array<Object>[]()[] 传递?


索引错误是什么意思? - royalTS
“索引(从零开始)必须大于或等于零,并且小于参数列表的大小。”这听起来像MacAddr被视为单个对象,而不是数组? - Ben
2
是的,第二种方法失败了,因为你引用了“参数1”、“参数2”等直到参数5,但你只提供了一个单一的参数(参数0)。你可以使用BitConverter.ToString代替,但最好还是坚持你的第一种方法。 - Jon Skeet
让你想念 JavaScript 中的扩展运算符 :( - Jamie Twells
5个回答

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")));

谢谢,我在哪里可以找到关于select方法的参考资料? - Ben
这是Linq Select() - fubo
谢谢。那些LINQ的东西对我来说看起来很新。 - Ben

0

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


0
这是因为您指定了一个有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"; 

0
你的string.Format()函数中只有1个参数,而它需要根据要求提供6个参数。 你可以使用String.Join来获得更好的可读性 -
mac = string.Join("-", MacAddr.Select(x => x.ToString(":X2")));

0
尝试使用 `BitConverter`。
mac = BitConverter.ToString(MacAddr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接