2016-04-06 29 views
5

Tôi có một địa chỉ MAC đơn giản dưới dạng một chuỗi, "b8:27:eb:97:b6:39" và tôi muốn đưa nó vào một mảng byte, [184, 39, 235, 151, 182, 57] trong mã C#.Chuyển đổi địa chỉ MAC thành mảng byte trong C#

Vì vậy, tôi chia nó lên như sau:

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

Và sau đó tôi cần một số loại for -loop phải uống mỗi chuỗi biến chúng thành một int 16-bit. Tôi đã thử Convert.ToInt8(split[i]), split[i].ToChar(0,2), (char)split[i], nhưng tôi không thể tìm ra cách thực hiện các chuỗi ký tự và để chúng là một số 8 bit duy nhất.

Trả lời

7

đây bạn đi

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

Trả lời trong ngày! Cảm ơn bạn. –

+1

@ RasmusBækgaard bạn được chào đón :) – fubo

0

Bạn cần phải sử dụng phương pháp Byte.Parse của .Net framework.

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

Tôi khuyên bạn nên sử dụng lớp PhysicalAdress thay vì tự mình thực hiện.

Nó có một phương pháp Parse:

PhysicalAdress.Parse("b8:27:eb:97:b6:39").GetAdressBytes(); 

tham khảo: https://msdn.microsoft.com/library/system.net.networkinformation.physicaladdress.parse(v=vs.110).aspx

Nhưng nó sẽ thất bại như phương pháp này chỉ chấp nhận - để tách các byte. Một phương pháp mở rộng đơn giản có thể giúp:

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

Sau đó sử dụng:

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

Chỉnh sửa: Đã bao gồm gợi ý.

+0

Xin lỗi về điều đó. Tốt hơn? – Toxantron

+0

nhiều :) mặc dù tôi không chắc chắn đó là những gì OP muốn? – Liam

+1

@Toxantron, sẽ tốt hơn nếu bạn đề nghị OP sử dụng 'PhysicalAddress.Parse (str) .GetAddressBytes()' và sau đó cung cấp các tham chiếu bạn đã cung cấp. – publicgk

Các vấn đề liên quan