在Java中将十六进制解析为short时的异常

Rog*_*ews 2 java java.util.scanner

在文件data.hex中,数据以十六进制形式给出,其中十六进制数的第一个数字始终小于8.

01FC 04BF 04C0 04C1 04C2 24C3 04C4 34C5 ...
Run Code Online (Sandbox Code Playgroud)

要解析此文件并将值存储在shrt []数组中,我已编写此代码

void read_hex_short(String filename, short[] shrt, int x, int y) throws Exception
{
    String str;
    Scanner s=new Scanner(new BufferedReader(new FileReader(filename)));
    for(int i=0;i<height*width;i++)
    {
        str= s.next();    // i have tried str="0x"+s.next() but it didn't work
        image[i]=(short)Integer.parseInt(str);
    }
    s.close();
}
Run Code Online (Sandbox Code Playgroud)

但我得到的是NumberFormatException,它在传递第一个字符串时出现,即仅01FC.我如何解析这些十六进制值并将它们存储在shrt []数组中?

Jon*_*eet 6

你应该用Integer.parseInt(str, 16)它来告诉它使用hex.

您还应该知道,任何大于0x7FFF的值最终都会在数组中为负数:Java没有任何无符号数字类型(除非您计算char).


das*_*ght 5

您可以Short.parseShort(str, 16)用来解析HEX.这将避免将其转换shortint.