打印出MAC地址

时间:2018-07-11 05:24:38

标签: c# string-formatting

只需尝试使用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>[]()[]吗?

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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"; 

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

尝试const endTime = 1532583817343 //timestamp

BitConverter

答案 4 :(得分:0)

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