2016-04-06 11 views
5

単純なMACアドレスを文字列として"b8:27:eb:97:b6:39"としています。これをC#コードの[184, 39, 235, 151, 182, 57]というバイト配列にしたいと考えています。MACアドレスをC#のバイト配列に変換する

だから私は、次のようにそれを分割:

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

そして私は、各部分は16ビットintにそれらを回す取るためにfor - ループのいくつかの並べ替えを必要とします。 Convert.ToInt8(split[i])split[i].ToChar(0,2)(char)split[i]を試しましたが、どのように文字列文字を取り、それらを単一の8ビット数にするかわかりません。ここ

答えて

7

あなたは.NET FrameworkのByte.Parseメソッドを使用する必要が

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

今日の回答!ありがとうございました。 –

+1

@RasmusBækgaardあなたは大歓迎です:) – fubo

0

を行きます。

byte value = Byte.Parse(split[1], NumberStyles.AllowHexSpecifier); 
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(); 

編集:付属の提案を。

+0

申し訳ありません。より良い? – Toxantron

+0

多く:)私はそれがOPが望んでいることはわからないが? – Liam

+1

@Toxantronは、OPに 'PhysicalAddress.Parse(str).GetAddressBytes()'を使用するように提案し、あなたが提供した参照を提供する方が良いでしょう。 – publicgk

関連する問題