我正在寻找一种在C#中生成随机MAC数的方法。在这一点上,谷歌是相当薄弱的。
Thx很多
解决方案:
在Yahia的帮助下,我能够编写以下解决方案。又来了!
public static string GenerateMACAddress()
{
var sBuilder = new StringBuilder();
var r = new Random();
int number;
byte b;
for (int i = 0; i < 6; i++)
{
number = r.Next(0, 255);
b = Convert.ToByte(number);
if (i == 0)
{
b = setBit(b, 6); //--> set locally administered
b = unsetBit(b, 7); // --> set unicast
}
sBuilder.Append(number.ToString("X2"));
}
return sBuilder.ToString().ToUpper();
}
private static byte setBit(byte b, int BitNumber)
{
if (BitNumber < 8 && BitNumber > -1)
{
return (byte)(b | (byte)(0x01 << BitNumber));
}
else
{
throw new InvalidOperationException(
"Der Wert für BitNumber " + BitNumber.ToString() + " war nicht im zulässigen Bereich! (BitNumber = (min)0 - (max)7)");
}
}
private static byte unsetBit(byte b, int BitNumber)
{
if (BitNumber < 8 && BitNumber > -1)
{
return (byte)(b | (byte)(0x00 << BitNumber));
}
else
{
throw new InvalidOperationException(
"Der Wert für BitNumber " + BitNumber.ToString() + " war nicht im zulässigen Bereich! (BitNumber = (min)0 - (max)7)");
}
}
发布于 2012-04-15 18:49:01
在.NET框架中没有这样的方法...
你需要自己写一个--阅读
格式说明
,请使用
随机生成器
要获得0到255之间的6个随机数,请根据需要设置2个相关位(用于全局唯一/本地管理),然后
将数字转换为十六进制
(即
,每个数字2位,左填充0)和
将这些结合在一起
作为分隔符
..。
发布于 2013-10-31 08:01:36
一个稍微不那么冗长的解决方案(我认为它仍然可以实现相同的结果):
public static string GetRandomMacAddress()
{
var random = new Random();
var buffer = new byte[6];
random.NextBytes(buffer);
var result = String.Concat(buffer.Select(x => string.Format("{0}:", x.ToString("X2"))).ToArray());
return result.TrimEnd(':');
}
这给出了格式化的string.Format,如果需要未格式化的,则删除并修剪
发布于 2014-01-23 06:15:20
MUG4N的解决方案有一个问题。你必须调整最低有效的两位,而不是最高有效的两位。
所以不是
b = setBit(b, 6); //--> set locally administered
b = unsetBit(b, 7); // --> set unicast
它应该是
b = setBit(b, 1); //--> set locally administered
b = unsetBit(b, 0); // --> set unicast
还有
是不正确的。相关行应该是
return unchecked((byte)(b & (byte)~(0x01 << BitNumber)));
当然,将其更改为以下代码可能会更简单:
if (i == 0)
{
b = (byte)((b & 0xFE) | 0x02) //-->set locally administered and unicast
}
https://stackoverflow.com/questions/10161291
复制相似问题