在C#中将MAC地址转换为字节数组

5

我有一个简单的MAC地址字符串,"b8:27:eb:97:b6:39",我想在C#代码中将其转换为字节数组[184, 39, 235, 151, 182, 57]

所以我使用以下方法进行拆分:

var split = str.Split(':');
byte[] arr = new byte[6];

然后我需要一种类似于for循环的方法,将每个子字符串转换为16位整数。我尝试过Convert.ToInt8(split[i])split[i].ToChar(0,2)(char)split[i],但我无法想出如何将两个字符串字符组合成一个8位数字。

3个回答

9

这里是你需要的内容

string mac = "b8:27:eb:97:b6:39";
byte[] arr = mac.Split(':').Select(x => Convert.ToByte(x, 16)).ToArray();

1
每日答案!谢谢。 - Rasmus Bækgaard

9
我建议使用PhysicalAddress类,而不是自己实现。它有一个Parse方法:
PhysicalAddress.Parse("b8:27:eb:97:b6:39").GetAdressBytes();

参考: https://msdn.microsoft.com/library/system.net.networkinformation.physicaladdress.parse(v=vs.110).aspx

但是,这个方法只接受-作为字节分隔符,所以会失败。一个简单的扩展方法可以帮助解决:

    public static byte[] ToMACBytes(this string mac) {
        if (mac.IndexOf(':') > 0)
            mac = mac.Replace(':', '-');
        return PhysicalAddress.Parse(mac).GetAddressBytes();
    }

接下来使用:

byte[] macBytes = "b8:27:eb:97:b6:39".ToMACBytes();

编辑:包含建议。


抱歉,这样可以了吗? - Toxantron
虽然我不确定这是否是原帖作者想要的,但我认为这很有用。 - Liam
1
@Toxantron,如果您建议OP使用PhysicalAddress.Parse(str).GetAddressBytes(),然后提供您提供的参考资料,那会更好。 - publicgk
1
这将抛出一个异常,因为 PhysicalAddress.Parse 只接受 - 作为分隔符。我已经编辑了答案并提供了解决方案。 - Loudenvier
1
在.NET 5之后,冒号字符也是一个有效的分隔符。 - Alan Hu
显示剩余2条评论

0
你需要使用 .Net 框架的 Byte.Parse 方法。
byte value = Byte.Parse(split[1], NumberStyles.AllowHexSpecifier);

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