2016-05-17 65 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