Java:将带符号的Int_32(十六进制)转换为Int

cra*_*aCH 2 java string hex type-conversion

我有一个签名的int_32值(FFFFFFFC)代表-4

如果我尝试通过...转换它

long x = Long.parseLong("FFFFFFFC", 32);
System.out.println("X: " + x);
Run Code Online (Sandbox Code Playgroud)

......我会得到"X:532021755372"而不是-4.我怎么能把它转换为有符号值?

das*_*ght 6

您得到的结果不正确,因为32表示数字基数,而不是结果中的位数.您正在将字符串解析为基数为32的数字(即编号系统中使用数字0..9和字母A..V,而不是0..9和A..F的数字.

要正确解析数字,请使用Long.parseLong("FFFFFFFC", 16);并将结果转换int为32位数字:

int x = (int)Long.parseLong("FFFFFFFC", 16);
System.out.println("X: " + x); // Prints X: -4
Run Code Online (Sandbox Code Playgroud)

演示.