繁体   English   中英

Java中的Integer.parseInt(string,radix)返回(主要是)负十进制值

[英]Integer.parseInt(string, radix) in Java returns (mostly) negative decimal values

就像我上面说的,我正在使用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地址已正确拆分,但是从Integer.parseInt(string,radix)返回的6个十六进制值中有5个为负数。 我可以看到负值是其实际十进制值的x + 256,但倒数第二个是正确的十进制值...任何想法为何会将6个值中的5个变为负数?

我认为parseInt的行为正确,但是您将其强制转换为字节会将数字转换为[-128; 127]。 尝试将结果存储在short或int数组中,或将它们保存在字节数组中,但请记住使用System.out.println(bytes[i] & 0xff)打印它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM