2013-02-03 44 views
10

我有一个小问题。我有号码,如5421,-1和1。我需要打印他们四个字节,如:Java打印四字节十六进制数

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

也像1.2,我已经浮点数,58.654:

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

我需要将两种类型的数字转换为它们的十六进制版本,但它们必须正好是四个字节(四对十六进制数字)。

有没有人知道这在Java中如何实现?请帮忙。

+0

我很困惑。 8.25的十六进制表示应该是0x1.08p3而不是0x41040000。实际上,0x41040000是整数1090781184的十六进制表示。 –

+0

我把它作为IEEE754 fp-numbers。 – user35443

回答

23

这里有两个功能,一个是整数,一个用于浮动。

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

好的答案,根据要求提供前导0。 –

+0

花车怎么样? – user35443

+0

@ user35443花车是不同的,你可以在你的问题中添加花车样本? –

3

使用

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

要获得前导零

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

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

+0

java文档说它不带前导零。 –

+1

@SriHarshaChilakapati但OP需要前导零。 –

4

这是花车:

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

对于整数,有一个更简单的方法。如果您希望十六进制数的阿尔法部分为大写,则使用大写'X',否则使用'x'作为小写。格式化程序中的'0'表示保持前导零。

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