2013-11-26 53 views
0
>>> print "%x" % (-1234) 
-4d2 

在Java/C這將是:fffffb2e如何擁有的printf%×類似蟒蛇

C:printf("%x", -1234)

的Java:System.out.println(String.format("%x", -1234));

+0

你嘗試什麼Java代碼? – ajb

+0

@ajb我添加了C/java代碼 – w00d

+0

Java結果是正確的。如果你想要非標準的十六進制格式,你需要自己做。 –

回答

1

可以使用Integer#toString(intVal, radix)方法此。

System.out.println(Integer.toString(1234, 16)); // 16 is the radix, thus hexadecimal 
System.out.println(Integer.toString(1234, 2)); // 16 is the radix, thus binary 

或者你甚至可以用Integer#toHexString(intVal)直接將其轉換爲十六進制字符串,如果這是唯一的要求。

+0

看看javadoc,看起來'toHexString'會將2^32添加到負數,這並不能解決問題。但是具有基數的靜態'toString'似乎給了他想要的東西。附:對第二行的評論是錯誤的... – ajb

+0

它適用於Java,但不夠通用,因此我不能申請C – w00d

+0

@ w00d - 它的Java和C所以可能有類似的方法,但並不總是你得到一種適用於所有不同語言的通用方法。 – SudoRahul

0

Java的String.format始終將整數參數爲無符號,當您使用%o%x格式 - 除非該參數是一個BigInteger因爲那無法確定大小。試試這個:

long whateverValue = -1234; 
System.out.println(String.format("%x", BigInteger.valueOf(whateverValue))); 

(我認爲這會工作,但我還沒有嘗試過)

2

這將做你所要求的:

int var = -1234; 
System.out.println(String.format("%s%x", (var < 0 ? "-" : ""), Math.abs(var))); 

此插件如果一個減號要打印的值是負值,然後格式化數字的絕對值。

+0

這是迄今爲止最通用的方法,所有其他人只適用於Java ..但我仍然在尋找一個更便宜的。 – w00d

+1

您可以使用['System.out.printf'](http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#printf%28java.lang.String,%20java .lang.Object ...%29),如果你想要更簡潔的東西。 – DaoWen

0

試試這個,
System.out.println(Integer.toString(-1234, 16));

0

您需要從負面情況不同,處理非負的情況下,這樣一個條件是必需的。之後,請撥打printf()

在C:

void printx (int x) { 
    if (x >= 0) printf("%x", x); 
    else printf("-%x", -x); 
} 

Java的將是類似的:

public static void printx (int x) 
{ 
    if (x >= 0) System.out.printf("%x", x); 
    else System.out.printf("-%x", -x); 
}