0

上で述べたように、私は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つを負に変換する理由はありますか?

4

1 に答える 1

10

parseInt は正しく動作していると思いますが、バイトへのキャストは数値を範囲 [-128; に変換します。127]。結果を short 配列または int 配列に格納するか、バイト配列に保持してみてくださいSystem.out.println(bytes[i] & 0xff)

于 2013-03-05T13:32:59.827 に答える