2013-08-06 132 views
9

我必須將int轉換爲十六進制值。例如,這是int值:android int轉換爲十六進制

int_value = -13516; 

要轉換爲十六進制值,我做的:

hex_value = Integer.toHexString(int_value); 

,我應該得到的值是:-34CC(我不知道我是否應該它是積極的)。

的事情是,這樣做的轉換這樣,我得到的價值是:​​

我不能使用此功能來進行這種轉換?

+0

它做轉換!它爲您提供了值的十六進制表示,其符號位設置爲負值。 Android使用二進制補碼錶示負整數:負值由設置的最左邊的位表示,正值由最左邊的位表示。請參閱[簽名編號表示](https://en.wikipedia.org/wiki/Signed_number_representations)。 我意識到這已經兩歲了,但對底層機制的牢固掌握對於程序員來說是一件有價值的事情。 :) –

+0

@LorneLaliberte如果(例如)你有一個C背景,printf的%X格式說明符會給你一個無符號的十六進制表示形式,無論你是否給它提供數字,簽名或不簽名,這仍然是意料之外的。更糟糕的是,Java甚至沒有*無符號整數類型,所以你甚至不能以這種方式修復它! – Michael

+0

@Micheal在這種情況下C和Java沒有區別,實際上java也是返回一個無符號值。比特(以及這些比特的十六進制表示)都是相同的。 「簽名」和「無符號」僅僅是對位的不同解釋。我想你可能想要刷新C的'sprintf'函數的內存,因爲'%X'說明符在兩種語言中都是相同的。 –

回答

18

文檔說Integer.toHexString返回int的十六進制表示爲無符號值。

我相信Integer.toString(value, 16)會完成你想要的。

+0

目前我已經嘗試過,它似乎使它成爲正確的方式! – masmic

1

經過以下爲整數爲十六進制和十六進制整數轉換

public class MainActivity extends Activity { 

int number; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    number = 678668; 
    Log.i("ACT", "Integer Number " + number); 

    /** 
    * Code for convert integer number to hex number. two mwthods. 
    */ 
    Log.i("ACT", String.format("#%x", number)); // use lower case x for 
               // lowercase hex 
    Log.i("ACT", "#" + Integer.toHexString(number)); 

    /** 
    * Code for convert hex number to integer number 
    */ 
    String hex = Integer.toHexString(number).replace("/^#/", ""); 
    int intValue = Integer.parseInt(hex, 16); 

    Log.i("ACT", "Integer Number " + intValue); 
    } 

} 
3
public static int convert(int n) { 
    return Integer.valueOf(String.valueOf(n), 16); 
} 
// in onstart: 
Log.v("TAG", convert(20) + ""); // 32 
Log.v("TAG", convert(54) + ""); // 84 

從代碼:Java Convert integer to hex integer

+0

但是用這種方法,你不是在做從十六進制到int的轉換嗎?我需要以其他方式,從一個有符號的int,到一個十六進制。 – masmic

+0

你是對的,這是相反的。 – VM4

2

兩個Integer.toHexString,以及的String.format( 「%X」)不支持的跡象。爲了解決這個問題,你可以使用一個三元表達式:

int int_value = -13516; 
    String hex_value = int_value < 0 
         ? "-" + Integer.toHexString(-int_value) 
         : Integer.toHexString(int_value); 
1

我不認爲以上的回答會給你的籤位的精確值。例如11值0B但-11的價值將是F5,而不是因爲-B 2的補碼進入遊戲來解決這個我已經修改了上面的回答

int int_value = -11; 
String hex_value = int_value < 0 
          ? Integer.toHexString(int_value+65536) : Integer.toHexString(int_value); 
String shortHexString = hex_value.substring(2); 

其中,65536爲2^16現在你可以得到預期的結果。快樂編碼:)

  • 列表項
0
String.format("#%06X", (0xFFFFFF & colorYellow)); 

輸出:#FFC107