Java печатает четырехбайтное шестнадцатеричное число

У меня небольшая проблема. У меня есть числа, такие как 5421, -1 и 1. Мне нужно распечатать их в четыре байта, например:

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

Кроме того, у меня есть числа с плавающей запятой, такие как 1,2, 58,654:

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

Мне нужно преобразовать оба типа чисел в их шестнадцатеричную версию, но они должны быть ровно в четыре байта (четыре пары шестнадцатеричных цифр).

Кто-нибудь знает, как это возможно в Java? Пожалуйста помоги.

Ответ 1

Вот две функции: одна для целых чисел, одна для float.

public static String hex(int n) {
    // call toUpperCase() if that 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 requirement)
    return hex(Float.floatToRawIntBits(f));
}

Ответ 2

Для целых есть еще более простой способ. Используйте капитал "X", если вы хотите, чтобы альфа-часть шестнадцатеричного номера была в верхнем регистре, иначе используйте "x" для нижнего регистра. "0" в форматировании означает наличие ведущих нулей.

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

Ответ 3

Здесь он предназначен для поплавков:

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

Ответ 4

Использование

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

Чтобы получить с ведущими нулями

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