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

时间:2016-04-06 08:30:46

标签: c# type-conversion bytearray

我有一个简单的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位int。 我尝试了Convert.ToInt8(split[i])split[i].ToChar(0,2)(char)split[i],但我无法弄清楚如何使用字符串字符并让它们成为一个8位数字。

3 个答案:

答案 0 :(得分:8)

你去吧

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

答案 1 :(得分:3)

我建议使用PhysicalAdress类而不是自己动手。

它有一个Parse方法:

PhysicalAdress.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();

修改:包含的建议。

答案 2 :(得分:0)

您需要使用.Net框架的Byte.Parse方法。

byte value = Byte.Parse(split[1], NumberStyles.AllowHexSpecifier);