上で述べたように、私はInteger.parseIntを使用して16進値を10進数に変換していますが、正の16進値を入力すると負の整数が返され続けます。
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アドレスが適切に分割されていることがわかりますが、6つの16進値のうち5つがInteger.parseInt(string、radix)から負として返されています。負の値は実際の10進値のx+256であることがわかりますが、最後から2番目が正しい10進値です... 6つの値のうち5つを負に変換する理由はありますか?