2012-04-20 23 views
3

文字列MacAddressがあります。これはバイト配列に変換する必要があります。 Javaではnumberformat例外をスローする直接変換はできません。これは私が、私はそれがステップString MacアドレスをByte配列に変換する方法

String mc = strCameraMacId.substring(0,2); 
     int test = Integer.parseInt(mc); 
     clientMac[0] = (byte) test; 

バイステップでやってみました

clientMac[0] = (byte)Integer.parseInt(strCameraMacId.substring(0, 2)); 

今やっていることですが、文字列のMCは値「08」で、バイトconverionイムにint型を行った後に構成されていゼロを失う。 変換しようとしているMACアドレスが「08-00-23-91-06-48」で、すべてのゼロが失われることがあります。私は?どのようにこの問題にアプローチするかについて誰かに考えがありますか?

ありがとうございます

+0

あなたは0 'を失う' とはどういう意味ですか? 08と8は同じです。 – ArjunShankar

+0

ゼロを失っているということはどういう意味ですか? int型の "08"は "8"です。 – John3136

答えて

4

ゼロはバイト値に暗示されます。 0x08 == 8.これを6バイトの配列に変換できるはずです。あなたのアプローチはうまくいきます。これを文字列に変換しようとするならば、各数字を2文字に戻すことをJavaに知らせる必要があることを覚えておいてください。それは暗黙のゼロを戻します。

+0

ありがとう、私に魅力として働いた! :) – rosesr

5

あなたは '0'を失っていません。 bytestringではないため、8と08は同じです。

あなたはparseIntメソッドを使用している:

しかし、もっと重要なのは、あなたのコードでこの間違いです。これにより、10進整数としてアドレスが解析されます。これは動作しません。なぜなら、MACアドレスは、表示方法が分割されていると通常は16進数です。たとえば、「08」の代わりに「A8」を見つけることができます。

Integer.parseInt(String s, int radix) 

が16としてradixをパスし、あなたが良いことがあります:

あなたは別の方法を使用する必要があります。

0

IPAddress Java libraryはこれを行い、aa:bb:cc:dd:ee:ff、aa-bb-cc-dd-ee-ff、aabb.ccdd .eeffなど。開示:私はその図書館のプロジェクトマネージャーです。ここで

は、バイト配列を取得する方法である:

String str = "aa:bb:cc:dd:ee:ff"; 
    MACAddressString addrString = new MACAddressString(str); 
    try { 
     MACAddress addr = addrString.toAddress(); 
     byte bytes[] = addr.getBytes();//get the byte array 
     //now convert to positive integers for printing 
     List<Integer> forPrinting = IntStream.range(0, bytes.length).map(index -> 0xff & bytes[index]).boxed().collect(Collectors.toList()); 
     System.out.println("bytes for " + addr + " are " + forPrinting); 
    } catch(AddressStringException e) { 
     //e.getMessage provides validation issue 
    } 

出力は次のとおりです。

bytes for aa:bb:cc:dd:ee:ff are [170, 187, 204, 221, 238, 255] 
関連する問題