lac*_*chs 0 java hex mac-address negative-number
正如我上面所说,我使用Integer.parseInt将十六进制值转换为十进制,但是当我输入正十六进制值时,我一直得到返回的负整数:
byte[] bytes2 = getMacBytes("90:e6:ba:97:4a:bb");
private static byte[] getMacBytes(String macStr) throws IllegalArgumentException {
byte[] bytes = new byte[6];
String[] hex = macStr.split("(\\:|\\-)");
for (int i = 0; i < 6; i++){
System.out.println(hex[i]);
}
if (hex.length != 6) {
throw new IllegalArgumentException("Invalid MAC address.");
}
try {
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) Integer.parseInt(hex[i], 16);
System.out.println(bytes[i]);
}
}
catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex digit in MAC address.");
}
return bytes;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它返回:
90 e6 ba 97 4a bb -112 -26 -70 -105 74 -69
所以我可以看到MAC地址被正确分割,但是6个十六进制值中的5个从Integer.parseInt(字符串,基数)返回为负数.我可以看到负值是其实际十进制值的x + 256,但倒数第二个是正确的十进制值...任何想法为什么它将6个值中的5个变为负值?
mar*_*cus 10
我认为parseInt表现正常,但你的转换为字节会将数字转换为范围[-128; 127].尝试将结果存储在short或int数组中,或将它们保存在字节数组中,但请记住使用它们进行打印System.out.println(bytes[i] & 0xff).