2011-12-31 60 views
59

我需要在Java中將整數值更改爲2位十六進制值。對此,有任何方法。 謝謝在Java中整數爲兩位數十六進制數

我最大的數字是63和最小的將是0. 我想要一個小值的前導零。

+0

你需要打印嗎?你需要把它變成一個字符串? – 2011-12-31 17:34:59

+0

我將寫入文件作爲兩位數十六進制 – 2011-12-31 17:36:02

+0

你至少檢查了整數javadoc?你打算如何將12345656轉換爲2位十六進制值? – 2011-12-31 17:36:25

回答

106
String.format("%02X", value); 

如果使用X代替xas suggested by aristar,那麼你就需要使用.toUpperCase()

+7

這是目前最好的答案。 – 2014-02-27 22:49:35

+0

同意這個比其他人好得多。它完美的作品。我建議的唯一一點是傳遞給方法的參數的更多描述。我必須查看是否將該值作爲整數或十六進制字符串傳遞。 – JRSofty 2014-03-25 09:10:26

+0

最佳解決方案!最短和最可讀的。感謝:D – wassup 2015-04-25 16:51:54

27
Integer.toHexString(42); 

的Javadoc:http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

注意,這可能會給你超過2個位數,但是! (一個整數是4個字節,所以你可能會得到8個字符。)

這裏有一點竅門讓你的填充,只要你絕對相信你只處理單字節值(255或更少):

Integer.toHexString(0x100 | 42).substring(1) 

Left padding integers (non-decimal format) with zeros in Java有更多(更好的)解決方案。

+2

不錯的零填充黑客:) – Grodriguez 2014-05-09 07:45:54

+0

你可以使用相同的技術來獲取更大的值。如果你想填充高達2個字節的值,你可以做Integer.toHexString(0x10000 | value).substring(1)。對於N十六進制數字,在「1」之後附加N 0。當然,你的十六進制值不能超過N位。 – user823981 2015-09-16 22:55:57

14

使用Integer.toHexString()。如果你只結束一位數字,不要忘記填寫一個前導零。如果你的整數大於255,你會得到2位以上的數字。

StringBuilder sb = new StringBuilder(); 
sb.append(Integer.toHexString(myInt)); 
if (sb.length() < 2) { 
    sb.insert(0, '0'); // pad with leading zero if needed 
} 
String hex = sb.toString(); 
+1

是否使用StringBuilder實際上是一種改進? http://pastebin.com/KyS06JMz – 2013-11-02 10:15:59

3

如果你只需要打印出來試試這個:

for(int a = 0; a < 255; a++){ 
    if(a % 16 == 0){ 
     System.out.println(); 
    } 
    System.out.printf("%02x ", a); 
} 
23
String.format("%02X", (0xFF & value));  
+6

有人可以解釋爲什麼這是做一個按位和與0xFF?這就是爲什麼SO上的答案不僅僅是代碼 – 2013-07-26 11:48:40

+4

0xFF&(byte)的值只是將有符號的字節轉換爲無符號的。 (int)-1 = 0xFFFFFFFF,(int)( - 1&0xFf)= 0xFF – aristar 2013-08-23 18:26:57

+0

在這種情況下,由於「%02X」格式的原因,不需要按位和0xFF。 – 2015-05-05 14:34:17