java - Java 中的 Integer.parseInt(string, radix) 返回 (moSTLy) 负十进制值

标签 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 = 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 巴 97 4a BB -112 -26 -70 -105 74 -69

所以我可以看到 MAC 地址被正确分割,但 6 个十六进制值中的 5 个从 Integer.parseInt(string, radix) 返回为负数。我可以看到负值是实际十进制值的 x + 256,但倒数第二个是正确的十进制值...... 知道为什么它将 6 个值中的 5 个变成负数吗?

最佳答案

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

关于java - Java 中的 Integer.parseInt(string, radix) 返回 (moSTLy) 负十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225022/

相关文章:

java - 如何从内部类访问隐藏的外部类变量?

Java套接字端口转发

c - 在多个 unsigned char 变量中输入十六进制值

android - 使用android MAC地址作为唯一标识符

java - 通过 MAC 地址检测 wi-fi 或有线网络接口(interface)

java - 输入文本文件的脚本

Java switch 语句 : Constant expression required, 但它是常量

linux - BASH - 将包含二进制数的文本文件转换为二进制文件

c# - 如何从字符串设置 ints 十六进制文字,

c++ - Linux C++ 如何以编程方式获取 LAN 上所有适配器的 MAC 地址