2016-05-17 67 views
0

我将一些整数转换为十六进制,但我有问题是当我通过一个负值将其转换为十六进制。负诠释到十六进制转换

实施例:在此情况下

String satpos = "13.0"; 
String satposs=satpos.replaceAll("\\.", ""); 
int satposition = Integer.parseInt(satposs); 
String nids = Integer.toHexString(satposition); 
String finished = nids+"0000"; 

应用返回“820000”,并且是正确的值,我需要。 但是,如果我通过:

String satpos = "-7.0"; 
String satposs=satpos.replaceAll("\\.", ""); 
int satposition = Integer.parseInt(satposs); 
String nids = Integer.toHexString(satposition); 
String finished = nids+"0000"; 

应用程序返回 “ffffffba0000” 但我应该得到 “DCA0000”

任何帮助表示赞赏。

+3

为什么'-70'应该是'DCA'? –

+0

我正在开发一个卫星定位应用程序,该应用程序将所有关于频道的信息制作成一个唯一的ID,用于从DVB接收器“调用”频道,我从dev获得的解释是: '轨道位置是13, 0 - 在130(十进制)=> 82(十六进制) - 加0000.最终结果命名空间= 820000' 在这种情况下轨道位置这个频道是-7.0 – Psycho

+2

什么表示你打算为负整数? Java基于使用2的补码。 70的十六进制表示是46,其2的补码是ffffffba。如果您需要负整数的不同表示法,则需要指定它并进行转换。 –

回答

2

基于由Andreas评论,这里是一个测试程序,打印您需要的值:

public class Test { 
    public static void main(String[] args) { 
    convert("13.0"); 
    convert("-7.0"); 
    } 

    private static void convert(String satpos) { 
    String satposs = satpos.replaceAll("\\.", ""); 
    int satposition = Integer.parseInt(satposs); 
    if (satposition < 0) { 
     satposition += 3600; 
    } 
    String nids = Integer.toHexString(satposition); 
    String finished = nids + "0000"; 
    System.out.println(finished); 
    } 

} 

如果角度为负,加上3600因为角度是在十分之一度。

+0

谢谢你,我没有考虑学位,现在已经很清楚了。 你们所有人都非常帮助 – Psycho