如何将字符串Mac地址转换为字节数组

时间:2012-04-20 11:35:41

标签: java string bytearray mac-address

我有String MacAddress,我需要将其转换为字节数组。 Java不会让我直接转换抛出一个数字格式的异常。这就是我现在正在做的事情

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

我尝试一步一步

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

但是字符串mc由值“08”组成,并且在执行int到byte转换之后,我将丢失零。 我试图转换的mac地址是“08-00-23-91-06-48”,我最终可能会失去所有的零。我会吗?有没有人知道如何处理这个问题?

非常感谢

3 个答案:

答案 0 :(得分:5)

你没有输掉'0'。因为byte不是string,而且8和08是相同的。

但更重要的是代码中的错误

您正在使用parseInt方法。这会将您的地址解析为十进制整数。这不起作用,因为MAC地址,当您显示它们的方式分割时通常是十六进制数字。例如,你可以遇到'A8'而不是'08'。

您需要使用其他方法:

Integer.parseInt(String s, int radix)

radix传递给16,你应该很好。

答案 1 :(得分:4)

零值将隐含在字节值中。请记住,0x08 == 8.您应该能够将您的数据转换为6个字节的数组。你的方法很好,只要记住,如果你要将它转换回字符串,你需要让Java知道你想要将每个数字填充回2个字符。这将使你隐含的零回到位。

答案 2 :(得分: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]
相关问题