如何在Java中将Mac地址转换为十六进制并传递给字节数组

7
我该如何在Java中将Mac地址转换为十六进制字符串并解析为字节?类似地,IP地址也一样吗?
谢谢。

这个问题没有意义。MAC地址已经是十六进制的,至少在书写时是这样的,而字节数组不包含十六进制,它们包含二进制。如果您将MAC地址作为文本获取,则需要将其从十六进制转换为二进制。如果您从API中获取它,则它已经是二进制,并且已经是一个字节数组。 - user207421
我假设他已经将其以字符串形式呈现,并需要将字符转换为字节... - Ben Holland
2个回答

19

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();
}

1

开源IPAddress Java库可以以多态方式解析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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接