Вопрос по java, android – Как преобразовать Mac-адрес в Hex и передать его в байтовый массив в Java

5

Как я могу преобразовать MacAddress в шестнадцатеричную строку, а затем проанализировать его в байт в Java? и так же IP-адрес, а?

Спасибо

Я предполагаю, что он имел его в виде строки и нуждался в символах, преобразованных в байты ... Ben Holland
Вопрос не имеет смысла. MAC-адреса уже находятся в шестнадцатеричном формате, по крайней мере, когда они записаны, а байтовые массивы не содержат шестнадцатеричный код, они содержат двоичный код. Если вы получаете MAC-адрес в виде текста, вы хотите преобразовать егоfrom шестнадцатеричный в двоичный. Если вы получаете его из API, он уже является двоичным и уже является байтовым массивом. user207421

Ваш Ответ

2   ответа
0

Java-библиотека с открытым исходным кодом IPAddress проанализирует как MAC-адреса, так и IP-адреса и преобразует их в байты полиморфным способом. Отказ от ответственности: я руководитель проекта этой библиотеки.

Следующий код будет делать то, что вы запрашиваете:

    String ipv4Addr = "1.2.3.4";
    String ipv6Addr = "aaaa:bbbb:cccc:dddd::";
    String macAddr = "a:b:c:d:e:f";
    try {
        HostIdentifierString addressStrings[] = {
            new IPAddressString(ipv4Addr),
            new IPAddressString(ipv6Addr),
            new MACAddressString(macAddr)
        };
        Address addresses[] = new Address[addressStrings.length];
        for(int i = 0; i < addressStrings.length; i++) {
            addresses[i] = addressStrings[i].toAddress();//parse
        }
        for(Address addr : addresses) {
            byte bytes[] = addr.getBytes();
            //convert to a list of positive Integer for printing
            List<Integer> forPrinting = IntStream.range(0, bytes.length).map(idx -> 0xff & bytes[idx]).boxed().collect(Collectors.toList());
            System.out.println("bytes for " + addr + " are " + forPrinting);
        }
    } catch(HostIdentifierException | IOException e) {
        //e.getMessage has validation error
    }

выход:

    bytes for 1.2.3.4 are [1, 2, 3, 4]
    bytes for aaaa:bbbb:cccc:dddd:: are [170, 170, 187, 187, 204, 204, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0]
    bytes for 0a:0b:0c:0d:0e:0f are [10, 11, 12, 13, 14, 15]
13

MAC-адрес уже в шестнадцатеричном формате, он имеет форму 6 пар из 2 шестнадцатеричных цифр.

String macAddress = "AA:BB:CC:DD:EE:FF";
String[] macAddressParts = macAddress.split(":");

// convert hex string to byte values
Byte[] macAddressBytes = new Byte[6];
for(int i=0; i<6; i++){
    Integer hex = Integer.parseInt(macAddressParts[i], 16);
    macAddressBytes[i] = hex.byteValue();
}

А также...

String ipAddress = "192.168.1.1";
String[] ipAddressParts = ipAddress.split("\\.");

// convert int string to byte values
Byte[] ipAddressBytes = new Byte[4];
for(int i=0; i<4; i++){
    Integer integer = Integer.parseInt(ipAddressParts[i]);
    ipAddressBytes[i] = integer.byteValue();
}

Похожие вопросы