Java

2011-12-31 17 views
59

'da iki basamaklı hex için tamsayı Bir tamsayı değerini Java'da 2 basamaklı hex değerine değiştirmem gerekiyor. Bunun için herhangi bir yol var. TeşekkürlerJava

En büyük numaram 63 olacak ve en küçük 0 olacaktır. Kük değerler için baştan sona sıfır istiyorum.

+0

Yazdırmanız mı gerekiyor? bir dizeye dönüştürmek mi gerekiyor? –

+0

Dosyaya iki basamaklı hex olarak yazacağım –

+0

En azından Integer javadoc'u kontrol ettiniz mi? 12345656'yı 2 basamaklı bir hex değerine dönüştürmeyi nasıl planlıyorsunuz? –

cevap

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

yerine xas suggested by aristar ait X kullanırsanız, o zaman .toUpperCase() kullanmaya gerek yoktur.

+7

Bu, şu anki en iyi cevaptır. –

+0

Bunun bir diğerinden daha iyi olduğunu kabul etti. Mükemmel çalışıyor. Önereceğim tek şey, yönteme geçirilen parametrelerin biraz daha açıklanmasıdır. Değeri bir tamsayı veya bir hex dizesi olarak geçersem bakmam gerekiyordu. – JRSofty

+0

En iyi çözüm! En kısa ve en okunaklı. Teşekkürler: D – wassup

27
Integer.toHexString(42); 

Javadoc: Bu ancak, size fazla 2 basamak verebileceğini http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

Not! (Bir Tamsayı 4 bayttır, bu nedenle potansiyel olarak 8 karaktere sahip olabilirsiniz.)

Tek baytlık değerlerle uğraştığınızdan kesinlikle emin olduğunuz sürece, dolgu yapmak için biraz kesmek. (255 veya daha az): Left padding integers (non-decimal format) with zeros in Java de

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

çok daha fazla (ve daha iyisi) çözümler.

+2

Güzel sıfırlama tamponu :) – Grodriguez

+0

Aynı tekniği daha büyük değerler için kullanabilirsiniz. 2 baytlık değere kadar dolgu istiyorsanız, Integer.toHexString (0x10000 | value) .substring (1) yapabilirsiniz. N hex basamakları için "1" den sonra N 0s eklersiniz. Tabii ki, onaltılı değeriniz N basamaktan fazla olmamalıdır. – user823981

14

Integer.toHexString()'u kullanın. Sadece bir rakamla sonuçlanırsa, baştaki bir sıfır ile doldurmayı unutmayın. Tamsayı 255'ten büyükse, 2'den fazla rakam alırsınız. Sadece yazdırmak gerekiyorsa

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' kullanımı aslında bir gelişme midir? http://pastebin.com/KyS06JMz –

3

onlara bu deneyin:

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

Birisi bunun neden bir bitlik ve 0xFF ile yapıldığını açıklayabilir mi? Bu yüzden SO yanıtları sadece –

+4

OxFF & (byte) değeri değil, imzalanmış baytı imzasız olarak dönüştürmelidir. (int) -1 = 0xFFFFFFFF, (int) (- 1 & 0xFf) = 0xFF – aristar

+0

Bu durumda, "% 02X" biçiminden dolayı bit-bit ve 0xFF gerekli değildir. –