在Java中使用16位十六进制字符串到signed int

Dim*_*mme 12 java parsing hex signed

我在Java中有一个字符串表示HEX中带符号的16位值.这个字符串可以通过任何东西"0000""FFFF".

我用Integer.parseInt("FFFF",16)它来转换为整数.但是,这会返回无符号值(65535).

我希望它返回一个有符号的值.在这个特定的例子中"FFFF"应该返回-1.

我怎样才能做到这一点?由于它是一个16位的值,我想用,Short.parseShort("FFFF",16)但这告诉我,我超出了范围.我想parseShort()预计会出现负号.

And*_*ter 14

您可以将int返回的内容Integer.parseInt()转换为简短:

short s = (short) Integer.parseInt("FFFF",16);
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

结果:

-1
Run Code Online (Sandbox Code Playgroud)

  • @Rachael因为`Integer.parseInt`返回的值仍然是(32位)`int`值 - 对于`0xFFFF`,即'65535`.通过将其分配给"short",有效地丢弃高16位,将第15位作为短值的符号位,得到"-1"(所有位为1).强制转换需要告诉编译器这个位丢失是有意的 - 如果没有强制转换,编译器会抱怨`可能有损转换从int到short` (2认同)