8桁の16進コードの文字列を整数に変換して、さまざまな値の文字列比較ではなくint比較を実行できるようにしています。
これはC ++ではかなり簡単なことですが、Javaで行う必要があります。私が満たす必要のあるテストケースは、基本的に「AA0F245C」をintに変換してから、その文字列に戻すことで、正しく変換されていることを確認します。
私は以下を試しました:
int decode = Integer.decode("0xAA0F245C"); // NumberFormatException
int decode2 = Integer.decode("AA0F245C"); //NumberFormatException
int parseInt = Integer.parseInt("AA0F245C", 16); //NumberFormatException
int valueOf = Integer.valueOf("AA0F245C", 16); //NumberFormatException
また、一度に2文字ずつ実行して結果を乗算してみましたが、変換は機能しますが、数値が正しくありません。
int id = 0;
for (int h = 0; h < hex.length(); h= h+2)
{
String sub = hex.subSequence(h, h+2).toString();
if (id == 0)
id = Integer.valueOf(sub, 16);
else
id *= Integer.valueOf(sub, 16);
}
//ID = 8445600 which = 80DEA0 if I convert it back.
私はあなたが知っているだけでサードパーティのライブラリを使用することはできないので、これはJava標準ライブラリで行う必要があります。
よろしくお願いします。
0xAA0F245C = 2853119068
しかしInteger.MAX_VALUE = 0x7fffffff = 2147483647
Integer.parseUnsignedInt("value",radix)
はあなたの目的にかなう方法を追加しました。値がそれより大きい場合Integer.MAX_VALUE
、負の数にマップされます。