2016-04-06 14 views
5

Ho un semplice indirizzo MAC come stringa, , e vorrei inserirlo in un array di byte, [184, 39, 235, 151, 182, 57] in codice C#.Converte l'indirizzo MAC in serie di byte in C#

Così ho diviso in su con il seguente:

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

E poi ho bisogno di una sorta di for -loop di prendere ogni stringa li trasformano in un 16 bit int. Ho provato Convert.ToInt8(split[i]), split[i].ToChar(0,2), (char)split[i], ma non riesco a capire come prendere a caratteri stringa e lasciarli essere un singolo numero di 8 bit.

risposta

7

qui si va

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

Risposta del giorno! Grazie. –

+1

@ RasmusBækgaard siete i benvenuti :) – fubo

0

è necessario utilizzare il metodo Byte.Parse di .NET framework.

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

Suggerisco di utilizzare la classe PhysicalAdress invece di farlo da solo.

Ha un metodo Parse:

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

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

Ma sarà sicuro come metodo accetta solo - come separatore byte. Un metodo semplice estensione può aiutare:

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

Quindi utilizzare:

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

Modifica: Incluso suggerimenti.

+0

Siamo spiacenti. Meglio? – Toxantron

+0

molto :) anche se non sono sicuro che sia ciò che l'OP vuole? – Liam

+1

@Toxantron, sarebbe meglio se suggerite OP di usare 'PhysicalAddress.Parse (str) .GetAddressBytes()' e quindi fornire i riferimenti che avete fornito. – publicgk