2013-02-03 24 views
10

Küçük bir sorunum var. , 1.2 gibi AyrıcaJava dört bayt onaltılık sayıyı yazdır

5421 -> 0x0000152D 
-1 -> 0xFFFFFFFF 
1 -> 0x00000001 

, ben kayan var nokta sayıları 58.654: Ben gibi, dört bayt bunları yazdırmak gerekiyor 1. 5421 gibi numaraları var -1 ve

8.25f -> 0x41040000 
8.26 -> 0x410428f6 
0.7 -> 0x3f333333 

ihtiyacım her iki sayı türünü onaltılık sürümüne dönüştürür, ancak tam olarak dört bayt uzunluğunda olmalıdırlar (dört çift onaltılık basamak).

Java'da bunun nasıl mümkün olabileceğini bilen var mı? Lütfen yardım et.

+0

Kafam karıştı. '8.25''in altıgen gösterimi '0x4.04003' değil,' 0x1.08p3' olmalıdır. Aslında, '0x41040000', 1090781184’ün altıgen gösterimi ile tamsayıdır. –

+0

Ben IEEE754 fp numaraları var. – user35443

cevap

23

ile almak için iki işlev, tamsayı için bir, şamandıra için biridir.

public static String hex(int n) { 
    // call toUpperCase() if that's required 
    return String.format("0x%8s", Integer.toHexString(n)).replace(' ', '0'); 
} 

public static String hex(float f) { 
    // change the float to raw integer bits(according to the OP's requirement) 
    return hex(Float.floatToRawIntBits(f)); 
} 
+1

Güzel cevap, istenen 0'ları istenen şekilde verir. –

+0

Şamandıralar ne durumda? – user35443

+0

@ user35443 yüzer farklıdır, sorunuzdaki yüzenlere örnekler ekleyebilir misiniz? –

3

Kullanım

String hex = Integer.toHexString(5421).toUpperCase(); // 152D 

, başında sıfır

İşte
String hex = Integer.toHexString(0x10000 | 5421).substring(1).toUpperCase(); 
+2

'System.out.println (Integer.toHexString (5421));' - 152d –

+0

Java dokümanı, sıfırlar olmadan verileceğini söylüyor. –

+1

@SriHarshaChilakapati ama OP lider sıfırları gerektirir. –

4

İşte yüzen içindir: Tamsayılar için

System.out.printf("0x%08X", Float.floatToRawIntBits(8.26f)); 
8

, bir daha da kolay bir yolu var. Altıgen sayının alfa kısmının büyük harf olmasını istiyorsanız, 'X' harfini kullanın, aksi takdirde 'x' harfini küçük harf olarak kullanın. Biçimlendiricideki '0', önde gelen sıfırları tutar.

public static String hex(int n) 
{ 
    return String.format("0x%04X", n); 
} 
İlgili konular