Как я уже сказал выше, я использую 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;
}
когда я запускаю этот код, он возвращает это:
90 e6 ba 97 4a bb -112 -26 -70 -105 74 -69
Итак, я вижу, что MAC-адрес правильно разделен, но 5 из 6 шестнадцатеричных значений возвращаются из Integer.parseInt(string, radix) как отрицательные. Я вижу, что отрицательные значения - это x + 256 их фактического десятичного значения, но второе последнее является правильным десятичным значением... Есть идеи, почему он превращает 5 из 6 значений в отрицательные?
0x
перед вашимиhex[i]
String
, чтобы Java интерпретировала его как шестнадцатеричный? - person Y__   schedule 05.03.2013