首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成随机mac地址

生成随机mac地址
EN

Stack Overflow用户
提问于 2012-04-15 18:42:34
回答 7查看 11.6K关注 0票数 6

我正在寻找一种在C#中生成随机MAC数的方法。在这一点上,谷歌是相当薄弱的。

Thx很多

解决方案:

在Yahia的帮助下,我能够编写以下解决方案。又来了!

代码语言:javascript
运行
复制
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)");
        }
    }
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-04-15 18:49:01

在.NET框架中没有这样的方法...

你需要自己写一个--阅读

格式说明

,请使用

随机生成器

要获得0到255之间的6个随机数,请根据需要设置2个相关位(用于全局唯一/本地管理),然后

将数字转换为十六进制

(即

,每个数字2位,左填充0)和

将这些结合在一起

作为分隔符

..。

票数 4
EN

Stack Overflow用户

发布于 2013-10-31 08:01:36

一个稍微不那么冗长的解决方案(我认为它仍然可以实现相同的结果):

代码语言:javascript
运行
复制
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,如果需要未格式化的,则删除并修剪

票数 11
EN

Stack Overflow用户

发布于 2014-01-23 06:15:20

MUG4N的解决方案有一个问题。你必须调整最低有效的两位,而不是最高有效的两位。

所以不是

代码语言:javascript
运行
复制
b = setBit(b, 6); //--> set locally administered
b = unsetBit(b, 7); // --> set unicast

它应该是

代码语言:javascript
运行
复制
b = setBit(b, 1); //--> set locally administered
b = unsetBit(b, 0); // --> set unicast

还有

是不正确的。相关行应该是

代码语言:javascript
运行
复制
return unchecked((byte)(b & (byte)~(0x01 << BitNumber)));

当然,将其更改为以下代码可能会更简单:

代码语言:javascript
运行
复制
if (i == 0)
{
    b = (byte)((b & 0xFE) | 0x02) //-->set locally administered and unicast
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10161291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档