小さな問題があります。私は5421、-1、1のような数字を持っています。次のように、それらを4バイトで印刷する必要があります。
5421 -> 0x0000152D
-1 -> 0xFFFFFFFF
1 -> 0x00000001
また、1.2、58.654のような浮動小数点数があります。
8.25f -> 0x41040000
8.26 -> 0x410428f6
0.7 -> 0x3f333333
両方のタイプの数値を16進数バージョンに変換する必要がありますが、それらは正確に4バイト長(4ペアの16進数)でなければなりません。
誰かがこれがJavaでどのように可能であるか知っていますか?助けてください。
2つの関数があり、1つは整数、もう1つは浮動小数点です。
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));
}
整数の場合、さらに簡単な方法があります。 16進数のアルファ部分を大文字にする場合は大文字の「X」を使用し、それ以外の場合は小文字の「x」を使用します。フォーマッタの「0」は、先行ゼロを維持することを意味します。
public static String hex(int n)
{
return String.format("0x%04X", n);
}
ここではフロート用です:
System.out.printf("0x%08X", Float.floatToRawIntBits(8.26f));
使用する
String hex = Integer.toHexString(5421).toUpperCase(); // 152D
先行ゼロを取得するには
String hex = Integer.toHexString(0x10000 | 5421).substring(1).toUpperCase();