2012-04-20 1 views
3

У меня есть String MacAddress, который мне нужно преобразовать в массив байтов. Java не позволяла мне делать прямое преобразование, бросая исключение numberformat. Это то, что я делаю прямо сейчасКак преобразовать String Mac-адрес в массив байтов

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

Я пытался делать это шаг за шагом

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

Но строка тс состоит из значения «08» и после выполнения Int в байт converion им теряя ноль. MAC-адрес im пытается конвертировать «08-00-23-91-06-48», и я могу потерять все нули. не так ли? и есть ли у кого-нибудь представление о том, как подойти к этой проблеме?

Большого спасибо

+0

Что вы имеете в виду под 'потери' в 0? 08 и 8 - то же самое. – ArjunShankar

+0

Что вы имеете в виду, что теряете ноль? «08» как int - «8». – John3136

ответ

4

Нулевые собираемся подразумеваться в байтах. Помните, что 0x08 == 8. Вы должны иметь возможность преобразовать ваш массив в 6 байт. Подход Youre в порядке, просто помните, что если вы собираетесь преобразовать это обратно в строку, вам нужно сообщить Java, что вы хотите переместить каждый номер на 2 символа. Это вернет ваши подразумеваемые нули на место.

+0

Спасибо, много работал как очарование для меня !!! :) – rosesr

5

Вы не теряете «0». Поскольку byte не является string, а 8 и 08 являются одинаковыми.

Но более важно это ошибка в коде:

Вы используете метод parseInt. Это анализирует ваши адреса как десятичные целые числа. Это не сработает, потому что MAC-адреса, когда они разделены так, как вы их показываете, обычно являются символами HEX. Например, вы можете встретить «A8» вместо «08».

Вы должны использовать другой метод:

Integer.parseInt(String s, int radix) 

Пропустите radix как 16, и вы должны быть хорошо.

0

IPAddress Java library сделает это за вас и будет обрабатывать множество различных форматов строки MAC-адреса, например 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]