如何将字符串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”,我最终可能会丢失所有的零。我会吗?并有任何人有关于如何解决这个问题的想法?
非常感谢
零是要在字节值来暗示。记住0x08 == 8.你应该能够将你的数据转换为一个6字节的数组。你的方法没问题,只要记住,如果你打算把它转换回一个字符串,你需要让Java知道你想把每个数字填回2个字符。这会让你的隐含零回到原位。
非常感谢我的魅力! :) – 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]
你是什么意思的 '失去' 0做? 08和8是一样的。 – ArjunShankar 2012-04-20 11:41:56
你是什么意思,你失去了零?作为int的“08”是“8”。 – John3136 2012-04-20 11:42:57