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

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

问题描述:

我有字符串MacAddress,我需要将其转换为字节数组。 Java不会让我直接转换抛出一个数字格式异常。这是我在做什么,现在如何将字符串Mac地址转换为字节数组

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字节converion IM后失去零点。 我试图转换的mac地址是“08-00-23-91-06-48”,我最终可能会丢失所有的零。我会吗?并有任何人有关于如何解决这个问题的想法?

非常感谢

+0

你是什么意思的 '失去' 0做? 08和8是一样的。 – ArjunShankar 2012-04-20 11:41:56

+0

你是什么意思,你失去了零?作为int的“08”是“8”。 – John3136 2012-04-20 11:42:57

零是要在字节值来暗示。记住0x08 == 8.你应该能够将你的数据转换为一个6字节的数组。你的方法没问题,只要记住,如果你打算把它转换回一个字符串,你需要让Java知道你想把每个数字填回2个字符。这会让你的隐含零回到原位。

+0

非常感谢我的魅力! :) – rosesr 2012-04-20 15:21:46

您不会失去'0'。因为byte不是string,而8和08是相同的。

但更重要的是这错误在你的代码:

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

您需要使用不同的方法:

Integer.parseInt(String s, int radix) 

传递radix 16,你应该是不错的。

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]