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

Posted

技术标签:

【中文标题】如何将Mac地址转换为十六进制并将其传递给java中的字节数组【英文标题】:How to convert a Mac Address to a Hex and pass it to a bytearray in java 【发布时间】:2012-06-05 20:07:30 【问题描述】:

如何将 MacAddress 转换为十六进制字符串,然后将其解析为 java 中的字节? 以及类似的 IP 地址?

谢谢

【问题讨论】:

这个问题没有意义。 MAC地址已经是十六进制的,至少在写入时,字节数组不包含十六进制,它们包含二进制。如果您以文本形式获取 MAC 地址,则希望将其 from 十六进制转换为二进制。如果您从 API 中获取它,它已经是二进制的,并且已经是一个字节数组。 我假设他以字符串的形式拥有它,并且需要将字符转换为字节...... 【参考方案1】:

一个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();

【讨论】:

【参考方案2】:

The open-source IPAddress Java library 将解析 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]

【讨论】:

以上是关于如何将Mac地址转换为十六进制并将其传递给java中的字节数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用从 C++ 发送的地址在 python 中获取值?

如何将 java 类名作为参数传递并将其用作方法中的强制转换

将日期时间转换为字符串格式并将其传递给查询

如何将 inputsource 转换为 inputstream 并将其作为参数提供给 stringreader?

如何将整数转换为没有0x的十六进制字符串(Julia 1.0)

如何将 int 转换为十六进制数并将其打印为 c 中的 3 位数字? [复制]