web-dev-qa-db-ja.com

String.format()およびJavaの16進数

String.format()がそのように振る舞う理由を理解しようとしています。

コンテキスト:システムプログラミングクラス、アセンブラーの記述。

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

使用してみました:String.format("%05X", decInt);

これは、正の数(11-> 0000B)ただし、負の数の場合は失敗します(-1 [-> FFFFFFFFの代わりにFFFFF

最後の5文字の部分文字列だけを取得できると思いますが、なぜこのように動作するのかを理解したいと思います。

55
Fitzoh

フォーマットで使用される幅は常に最小幅です。この場合、部分文字列操作を使用する代わりに、次のことをお勧めします。

  String.format("%05X", decInt & 0xFFFFF);
79
Daniel Martin

フォーマット幅は最小桁数を作成するためにのみ機能し、先行ゼロにのみ効果があります。

部分文字列の代わりに、ビットマスクを使用できます。

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

ところで、質問で主張されている11ではなく、0000B-> 0000Aです。

13
Bohemian