打印出 MAC 地址
Printing out MAC address
只是尝试使用 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 case 和 string[]
。
我可以看到 string.format
有一个重载方法:
Format(String, array<Object>[]()[])
。是否可以创建某种形式的 byte[],可以将其视为 array<Object>[]()[]
?
出现错误是因为您要格式化 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")));
这是因为您指定了带有 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";
您的 string.Format()
函数中只有 1 个参数,而根据要求需要 6 个参数。
您可以使用 String.Join
以获得更好的可读性方法 -
mac = string.Join("-", MacAddr.Select(x => x.ToString(":X2")));
尝试BitConverter
mac = BitConverter.ToString(MacAddr);
BitConverter.ToString(byte[])
获取您想要的确切字符串,尽管 MAC 地址通常用冒号分隔,而不是破折号。
只是尝试使用 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 case 和 string[]
。
我可以看到 string.format
有一个重载方法:
Format(String, array<Object>[]()[])
。是否可以创建某种形式的 byte[],可以将其视为 array<Object>[]()[]
?
出现错误是因为您要格式化 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")));
这是因为您指定了带有 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";
您的 string.Format()
函数中只有 1 个参数,而根据要求需要 6 个参数。
您可以使用 String.Join
以获得更好的可读性方法 -
mac = string.Join("-", MacAddr.Select(x => x.ToString(":X2")));
尝试BitConverter
mac = BitConverter.ToString(MacAddr);
BitConverter.ToString(byte[])
获取您想要的确切字符串,尽管 MAC 地址通常用冒号分隔,而不是破折号。