2012-03-07 13 views
46

String.format()はなぜそれが動作しているのか理解しようとしています。String.format()とJavaの16進数

コンテキスト:アセンブラを記述するシステムプログラミングクラス。

オブジェクトファイルには、値から作成している5文字の16進数フィールドがあります。

使用してみました

String.format("%05X", decInt);

を正の数 (11 - >0000B)することを目的として、この作品 それが負の数 のために失敗したが(-1 - 代わりFFFFFの>FFFFFFFF

私は考え私はちょうど最後の5文字の部分文字列を取ることができますが、私はまだそれがこのように動作する理由を理解したいと思います。

+5

問題は、フォーマットメソッドで設定された「幅」です(この場合は5)が最小幅です。 – twain249

答えて

66

フォーマットで使用される幅は、常に最小幅です。この場合は、代わりに私が示唆したサブ文字列操作を使用する:

String.format("%05X", decInt & 0xFFFFF); 
11

フォーマット幅は数字だけの最小番号を作成するために働き、そして唯一の先行ゼロに影響を及ぼします。あなたの質問に記載>0000B、ない0000A - ところで、11

String.format("%05X", decInt & 0x0FFFFF) 

:代わりに、サブストリングの

は、あなたはビットマスクを使用することができます。

+1

これは意味があります。また戻ってA→B、歓声を修正しました – Fitzoh