11

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

4

4 に答える 4

26

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

整数の場合、さらに簡単な方法があります。16 進数のアルファ部分を大文字にしたい場合は大文字の「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 に答える