Java中的parseInt(字符串、基数)返回(大部分)负的十进制值

Java中的parseInt(字符串、基数)返回(大部分)负的十进制值,java,hex,mac-address,negative-number,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 =

如上所述,我使用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;
}
byte[]bytes2=getMacBytes(“90:e6:ba:97:4a:bb”);
私有静态字节[]getMacBytes(字符串macStr)引发IllegalArgumentException{
字节[]字节=新字节[6];
字符串[]hex=macStr.split(“(\\:\ \ \-)”;
对于(int i=0;i<6;i++){
系统输出println(十六进制[i]);
}
如果(十六进制长度!=6){
抛出新的IllegalArgumentException(“无效的MAC地址”);
}
试一试{
对于(int i=0;i<6;i++){
字节[i]=(字节)整数.parseInt(十六进制[i],16);
System.out.println(字节[i]);
}
}
捕获(数字格式){
抛出新的IllegalArgumentException(“MAC地址中的十六进制数字无效”);
}
返回字节;
}
当我运行此代码时,它将返回以下内容:

九十 e6 文学士 97 4a bb -112 -26 -70 -105 74 -六十九

因此,我可以看到MAC地址被正确分割,但6个十六进制值中有5个是从Integer.parseInt(字符串,基数)返回的负值。我可以看到负值是实际小数的x+256,但最后一个是正确的小数。。。
你知道为什么它会将6个值中的5个变成负数吗?

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

是否尝试在
hex[i]前面添加
0x
String
s让Java将其解释为十六进制?@Y_uuu:这就是基数的作用。Ho抱歉没有看到它:(@lachs:记住,Java中的
byte
是一个介于-128到127之间的有符号数字。所以
(byte)200
-56
。非常感谢马库斯和其他人!我知道这一定很简单,但不是这么简单。我感觉自己像一个主要的n00b。祝你度过一个美妙的夜晚/白天,无论你在哪里,再次感谢!