3

我有字符串 MacAddress,我需要将其转换为字节数组。Java 不允许我进行直接转换并抛出 numberformat 异常。这就是我现在正在做的

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 转换为字节之后,我失去了零。我试图转换的mac地址是“08-00-23-91-06-48”,我最终可能会丢失所有的零。我会吗?有没有人知道如何解决这个问题?

非常感谢

4

3 回答 3

5

您不会丢失“0”。因为 abyte不是 a string, 8 和 08 是一样的。

但更重要的是您的代码中的这个错误:

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

您需要使用不同的方法:

Integer.parseInt(String s, int radix)

通过radixas 16,你应该很好。

于 2012-04-20T11:46:23.373 回答
4

零将隐含在字节值中。请记住 0x08 == 8。您应该能够将您的数组转换为 6 个字节的数组。您的方法很好,请记住,如果要将其转换回字符串,则需要让 Java 知道您要将每个数字填充回 2 个字符。这将使您的隐含零点恢复原状。

于 2012-04-20T11:44:01.917 回答
1

IPAddress Java 库将为您执行此操作,并将处理许多不同的 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]
于 2018-01-11T18:33:46.563 回答