2016-05-17 15 views
0

いくつかの整数を16進数に変換していますが、問題は負の値を渡して16進数に変換するときです。16進数への負の整数

例:この場合

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

アプリケーション戻る「82万」と私が必要正しい値です。 しかし、私は渡す場合:

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

私はチャンネルに関するすべての情報を取り、DVB受信機からチャンネルを「呼び出す」ために使用できるユニークなIDを作成するsatfinderアプリを開発しています。私はdevから得た説明は '軌道位置は13、 0 - これを130(dec)=> 82(16進数) - 0000を追加します。最終結果名前空間= 820000' このチャンネルの軌道位置は-7.0です – Psycho

+2

負の整数はどのような表現ですか? Javaは2の補数を使用しています。 70の16進表記は46であり、2の補数はffffffbaです。負の整数の表現が異なる場合は、それを指定して変換を行う必要があります。 –

答えて

2

は、ここで必要な値を出力するテストプログラムです:

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); 
    } 

} 

角度が負の場合、角度は0.1度単位であるため、3600を追加します。

+0

ありがとう、私は度でそれについて考えていませんでしたが、今は一日ですべてがクリアです。 皆さん全員が大いに助けてくれました – Psycho