Java中带符号整数的16位十六进制字符串

Java中带符号整数的16位十六进制字符串,java,parsing,signed,hex,Java,Parsing,Signed,Hex,我有一个Java字符串,用十六进制表示有符号的16位值。此字符串可以是从“0000”到“FFFF”的任何字符串 我使用Integer.parseInt(“FFFF”,16)将其转换为整数。但是,这将返回一个无符号值(65535) 我希望它返回一个有符号的值。在此特定示例中,“FFFF”应返回-1 我怎样才能做到这一点?因为它是一个16位的值,所以我想使用Short.parseShort(“FFFF”,16),但这表明我超出了范围。我猜parseShort()需要一个负号。您可以将从Integer

我有一个Java字符串,用十六进制表示有符号的16位值。此字符串可以是从
“0000”
“FFFF”
的任何字符串

我使用
Integer.parseInt(“FFFF”,16)
将其转换为整数。但是,这将返回一个无符号值(
65535

我希望它返回一个有符号的值。在此特定示例中,
“FFFF”
应返回
-1


我怎样才能做到这一点?因为它是一个16位的值,所以我想使用
Short.parseShort(“FFFF”,16)
,但这表明我超出了范围。我猜
parseShort()
需要一个负号。

您可以将从
Integer.parseInt()
返回的
int
转换为short:

short s = (short) Integer.parseInt("FFFF",16);
System.out.println(s);
结果:

-1
试一试


@AndreasFester,为什么这需要进一步转换为short?@Rachael,因为
Integer.parseInt
返回的值仍然是一个(32位)
int
值-对于
0xFFFF
,即
65535
。通过将其分配给
,有效地丢弃了上面的16位,并将位15作为短值的符号位,从而产生
-1
(所有位均为1)。强制转换需要告诉编译器这种位丢失是有意的-如果没有强制转换,编译器会抱怨
从int到short的有损转换
@AndreasFester谢谢你的解释。
int i = (short) Integer.parseInt("FFFF", 16);