Javaでは整数から2桁の16進数


82

Javaで整数値を2桁の16進値に変更する必要があります。これを行う方法はありますか。ありがとう

私の最大数は63で、最小数は0になります。小さい値には先行ゼロが必要です。


印刷する必要がありますか?あなたはそれを文字列に変える必要がありますか?
Ahmed Masud 2011

2桁の16進数としてファイルに書き込みます
Salih Erikci 2011

少なくとも整数のjavadocをチェックしましたか?12345656を2桁の16進値にどのように変換する予定ですか?
JB Nizet 2011

回答:


147
String.format("%02X", value);

aristarが提案するX代わりにを使用する場合は、を使用する必要はありません。x .toUpperCase()


8
これが現時点での最良の答えです。
David J.

1
これは他のどれよりもはるかに優れていることに同意しました。それは完璧に動作します。私が提案する唯一のことは、メソッドに渡されるパラメーターのもう少しの説明です。値を整数または16進文字列として渡したかどうかを調べる必要がありました。
JRSofty 2014年

31
Integer.toHexString(42);

Javadoc:http//docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

ただし、これにより2桁を超える場合があることに注意してください。(整数は4バイトなので、8文字を取り戻す可能性があります。)

シングルバイト値(255以下)のみを扱っていることが絶対に確実である限り、パディングを取得するためのちょっとしたハックがあります。

Integer.toHexString(0x100 | 42).substring(1)

Javaのゼロを使用した左パディング整数(非10進形式)でのより多くの(そしてより良い)ソリューション。


3
素敵なゼロパディングハック:)
Grodriguez 2014年

1
大きな値にも同じ手法を使用できます。最大2バイトの値のパディングが必要な場合は、Integer.toHexString(0x10000 | value).substring(1)を実行できます。Nの16進数の場合、「1」の後にN0を追加します。もちろん、16進値はN桁以下でなければなりません。
user823981 2015

28
String.format("%02X", (0xFF & value));    

7
誰かがこれがビット単位で0xFFで行われている理由を説明できますか?これが、SOに関する回答が単なるコードではない理由です
Stealth Rabbi

4
OxFF&(byte)valueは、符号付きバイトを符号なしに変換するだけです。(int)-1 = 0xFFFFFFFF、(int)(-1&0xFf)= 0xFF
aristar 2013

この場合、「%02X」形式のため、ビット単位で0xFFを使用する必要はありません。
Freek de Bruijn 2015

1
%02X指定子は、最低2桁を指定します。正確に2桁(上位ビットを破棄)が必要な場合は、ビット単位のとが必要です。
プラグウォッシュ2016年

この追加情報に感謝します。
tryp 2017年

14

を使用しInteger.toHexString()ます。1桁しかない場合は、先頭にゼロを付けることを忘れないでください。整数が255より大きい場合、2桁以上になります。

StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(myInt));
if (sb.length() < 2) {
    sb.insert(0, '0'); // pad with leading zero if needed
}
String hex = sb.toString();

2
StringBuilder実際の使用は改善されていますか?pastebin.com/KyS06JMz
ちょうどlerning

4

それらを印刷する必要がある場合は、これを試してください。

for(int a = 0; a < 255; a++){
    if( a % 16 == 0){
        System.out.println();
    }
    System.out.printf("%02x ", a);
}

1

これを使用して、バイトごとにスペースで区切られた整数の同等の16進値を表す文字列を取得します EX:4バイトで260の16進値= 00 00 01 04

    public static String getHexValString(Integer val, int bytePercision){
    StringBuilder sb = new StringBuilder();
    sb.append(Integer.toHexString(val));

    while(sb.length() < bytePercision*2){
        sb.insert(0,'0');// pad with leading zero
    }

    int l = sb.length(); // total string length before spaces
    int r = l/2; //num of rquired iterations

    for (int i=1; i < r;  i++){
        int x = l-(2*i); //space postion
        sb.insert(x, ' ');
    }
    return sb.toString().toUpperCase();         
}

public static void main(String []args){
    System.out.println("hex val of 260 in 4 bytes = " + getHexValString(260,4));
}

0

GabrielOshiroによると、整数を長さ8にフォーマットしたい場合は、これを試してください。

String.format("0x%08X", 20) //print 0x00000014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.