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();