我有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”,我最终可能会失去所有的零。我会吗?有没有人知道如何处理这个问题?
非常感谢
答案 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]