11

我有一个小问题。我有 5421、-1 和 1 之类的数字。我需要将它们打印成四个字节,例如:

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

另外,我有浮点数,如 1.2、58.654:

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

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

有谁知道这在 Java 中怎么可能?请帮忙。

4

4 回答 4

26

这里有两个函数,一个是整数,一个是浮点数。

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));
}
于 2013-02-03T10:49:03.647 回答
8

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

public static String hex(int n) 
{
    return String.format("0x%04X", n);
}
于 2014-12-15T18:43:40.027 回答
4

这是花车:

    System.out.printf("0x%08X", Float.floatToRawIntBits(8.26f));
于 2013-02-03T10:59:15.537 回答
3

采用

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

获得前导零

String hex = Integer.toHexString(0x10000 | 5421).substring(1).toUpperCase();
于 2013-02-03T10:46:51.233 回答