web-dev-qa-db-ja.com

Java 4バイトの16進数を出力します

小さな問題があります。私は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でどのように可能であるか知っていますか?助けてください。

11
user35443

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));
}
25
Hui Zheng

整数の場合、さらに簡単な方法があります。 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));
4
jdb

使用する

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

先行ゼロを取得するには

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