我必須將int轉換爲十六進制值。例如,這是int值:android int轉換爲十六進制
int_value = -13516;
要轉換爲十六進制值,我做的:
hex_value = Integer.toHexString(int_value);
,我應該得到的值是:-34CC
(我不知道我是否應該它是積極的)。
的事情是,這樣做的轉換這樣,我得到的價值是:
我不能使用此功能來進行這種轉換?
我必須將int轉換爲十六進制值。例如,這是int值:android int轉換爲十六進制
int_value = -13516;
要轉換爲十六進制值,我做的:
hex_value = Integer.toHexString(int_value);
,我應該得到的值是:-34CC
(我不知道我是否應該它是積極的)。
的事情是,這樣做的轉換這樣,我得到的價值是:
我不能使用此功能來進行這種轉換?
文檔說Integer.toHexString
返回int
的十六進制表示爲無符號值。
我相信Integer.toString(value, 16)
會完成你想要的。
目前我已經嘗試過,它似乎使它成爲正確的方式! – masmic
經過以下爲整數爲十六進制和十六進制整數轉換
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);
}
}
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
兩個Integer.toHexString,以及的String.format( 「%X」)不支持的跡象。爲了解決這個問題,你可以使用一個三元表達式:
int int_value = -13516;
String hex_value = int_value < 0
? "-" + Integer.toHexString(-int_value)
: Integer.toHexString(int_value);
我不認爲以上的回答會給你的籤位的精確值。例如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現在你可以得到預期的結果。快樂編碼:)
String.format("#%06X", (0xFFFFFF & colorYellow));
輸出:#FFC107
它做轉換!它爲您提供了值的十六進制表示,其符號位設置爲負值。 Android使用二進制補碼錶示負整數:負值由設置的最左邊的位表示,正值由最左邊的位表示。請參閱[簽名編號表示](https://en.wikipedia.org/wiki/Signed_number_representations)。 我意識到這已經兩歲了,但對底層機制的牢固掌握對於程序員來說是一件有價值的事情。 :) –
@LorneLaliberte如果(例如)你有一個C背景,printf的%X格式說明符會給你一個無符號的十六進制表示形式,無論你是否給它提供數字,簽名或不簽名,這仍然是意料之外的。更糟糕的是,Java甚至沒有*無符號整數類型,所以你甚至不能以這種方式修復它! – Michael
@Micheal在這種情況下C和Java沒有區別,實際上java也是返回一個無符號值。比特(以及這些比特的十六進制表示)都是相同的。 「簽名」和「無符號」僅僅是對位的不同解釋。我想你可能想要刷新C的'sprintf'函數的內存,因爲'%X'說明符在兩種語言中都是相同的。 –