Java で基数を変換するために使用できる方法は何ですか? IntegerToBase(int, base)みたいなのですが思い出せません。
3 に答える
文字通り、整数値は1つのベースから別のベースに変換されません。コンピューティングのパイオニアの1人であるフォンノイマンのおかげで、バイナリ回路で基数10の算術演算を使用するというアイデアはほとんど意味がないと考えていました。整数はバイナリ形式で格納され、それを変更しようとはしていません:-)私たちが何であるか話しているのは、それらをある基数(デフォルトの基数10以外)で表す文字列に変換し、文字列を(デフォルトの)基数10以外の基数の整数に変換することです。必要なツールはIntegerクラスの静的メソッドです。
Javaは
Integer.toString(int i, int radix)
、整数と基数(基数)を取り、その整数の文字列表現をその基数で返す変換関数を提供します。String hexRepr = Integer.toString(255, 16) // returns "FF"
逆に、つまり、異なるベースの数値を表す文字列から、
Integer.parseInt(String s, int radix)
int myNum = Integer.parseInt("FF", 16) // returns 255
基本radix1文字列として表される数値を基本radix2文字列表現に変換するには、次の例に示すように、上記の2つの方法を組み合わせる必要があります。
int radix1 = 16; // The input will be parsed assuming base 16 representation int radix2 = 4; // The result will be output using a base 4 representation String input = "FF"; // which in base 16 represents the number 255 String converted = Integer.toString(Integer.parseInt(radix1Representation, radix1),radix2); /// returns "3333" which in base 4 is the number 255
詳細については、APIドキュメントをご覧ください。読者がこれらの方法を使用するときに注意する必要があることも理解できるように、ここにその一部を含めました。
public static String toString(int i, int radix)
このメソッドは、2番目の引数で指定された基数の最初の引数の文字列表現を返します。
基数が。より小さいCharacter.MIN_RADIX
か大きい場合Character.MAX_RADIX
は、代わりに基数10が使用されます。
最初の引数が負の場合、結果の最初の要素はASCIIマイナス文字'-'
('\u002D'
)です。最初の引数が負でない場合、結果に符号文字は表示されません。
結果の残りの文字は、最初の引数の大きさを表します。'0'
大きさがゼロの場合、それは単一のゼロ文字('\u0030'
)で表されます。そうしないと、大きさの表現の最初の文字がゼロ文字になりません。次のASCII文字が数字として使用されます。
0123456789abcdefghijklmnopqrstuvwxyz
これらは'\u0030'
通り抜け'\u0039'
て'\u0061'
います'\u007A'
。基数がNの場合、これらの文字の最初のNは、示されている順序で基数Nの数字として使用されます。したがって、16進数(基数16)の数字は0123456789abcdefです。大文字が必要な場合はString.toUpperCase()
、結果に対してメソッドを呼び出すことができます。
Integer.toString(n, 16).toUpperCase()
ソース:http ://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toString%28int,%20int%29
public static int parseInt(String s, int radix) throws NumberFormatException
このメソッドは、文字列引数を2番目の引数で指定された基数の符号付き整数として解析します。文字列内の文字はすべて、指定された基数の数字である必要があります(Character.digit(char, int)
非負の値を返すかどうかによって決定されます)。ただし、最初の文字は、負の値を示すASCIIマイナス記号'-'
('\u002D'
)またはASCIIプラス記号'+'
('\u002B'
)である場合があります。正の値を示します。結果の整数値が返されます。
次のいずれかの状況が発生した場合、タイプNumberFormatExceptionの例外がスローされます。
最初の引数は
null
、長さがゼロの文字列です。基数は。よりも小さい
Character.MIN_RADIX
か大きいかのいずれかですCharacter.MAX_RADIX
。文字列の長さが1より長い場合、最初の文字がマイナス記号
'-'
('\u002D'
)またはプラス記号'+'
( )になる場合を除いて、文字列のどの文字も指定された基数の数字ではありません。'\u002B'
文字列で表される値は、int型の値ではありません。
例:
parseInt("0", 10) // returns 0
parseInt("473", 10) // returns 473
parseInt("+42", 10) // returns 42
parseInt("-0", 10) // returns 0
parseInt("-FF", 16) // returns -255
parseInt("1100110", 2) // returns 102
parseInt("2147483647", 10) // returns 2147483647
parseInt("-2147483648", 10) // returns -2147483648
parseInt("2147483648", 10) // throws NumberFormatException
parseInt("99", 8) // throws NumberFormatException
parseInt("Kona", 10) // throws NumberFormatException
parseInt("Kona", 27) // returns 411787
Integer.parseInt("101", 2)
たとえば、5 (対応する 10 進数) が得られます。
2 番目の引数で指定された基数で解析されたときに、指定された String から抽出された値を保持する Integer オブジェクトを返します。最初の引数は、引数が parseInt(java.lang.String, int) メソッドに渡された場合とまったく同じように、2 番目の引数で指定された基数の符号付き整数を表すものとして解釈されます。結果は、文字列で指定された整数値を表す Integer オブジェクトです。つまり、このメソッドは次の値に等しい Integer オブジェクトを返します: ( source )
new Integer(Integer.parseInt(s, radix))
同じソースから、次のものもあります。
public static String toString(int i,int radix)
2 番目の引数で指定された基数で、最初の引数の文字列表現を返します。
したがって、2 進数から 10 進数に変換する場合:
Integer.parseInt(binary_number_in_string, 2);
10進数から2進数にしたい場合:
System.out.println(Integer.toString(2,2));
別の基数から 10 進数に、またはその逆に変換するには、基数パラメーターを変更するだけです。
クラス Integerには、次のようなデフォルトの会話メソッドがすでにいくつかあることに注意してください。
public static String toBinaryString(int i)
基数 2 の符号なし整数 ( source )として整数引数の文字列表現を返します。
public static String toHexString(int i)
基数 16 の符号なし整数 ( source )として整数引数の文字列表現を返します。
public static String toOctalString(int i)
基数 8 の符号なし整数 ( source )として整数引数の文字列表現を返します。
上記のメソッドの戻り値の型からわかるように、基数間で変換されるのは整数ではありません。メソッドは、引数として整数パスの特定のベースで文字列表現を返しています。
このInteger
クラスは、この機能を提供する 2 つのユーティリティ メソッドを提供しますが、変換の媒体は文字列です。
Integer.parseInt(String s, int radix)
指定されたベースから解析するInteger.toString(int i, int radix)
特定のベースに変換する
Integer
値は内部的に 10 進形式 (基数 10) で格納されることに注意してください。
たとえば、01000 (8 進数) を 512 (10 進数) に変換して戻すには、次のようにします。
String octal = "01000";
int i = Integer.parseInt(octal, 8);
String decimal = Integer.toString(i, 10);
System.out.println(decimal); // prints 512