我有一个签名的int_32值(FFFFFFFC)代表-4
如果我尝试将其转换为......
long x = Long.parseLong("FFFFFFFC", 32);
System.out.println("X: " + x);
......我得到" X:532021755372"而不是-4。 我怎么能把它转换为有符号值?
答案 0 :(得分:5)
您得到的结果不正确,因为32表示numeric base,而不是结果中的位数。您正在将字符串解析为基数为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
答案 1 :(得分:1)
如果FFFFFFFC表示-4,则为int,不长,将其解析为
int x = Integer.parseUnsignedInt("FFFFFFFC", 16);
你会得到-4
答案 2 :(得分:0)
试试这个
int x= new BigInteger("FFFFFFFC", 16).intValue();
System.out.println("X: " + x);