What is the method that you can use to convert between bases in Java? It is something like IntegerToBase (int, base), but I cannot remember.
3 回答
从字面上讲,整数值不会从一个基数转换为另一个基数。感谢 von Neumann,计算的先驱之一,他认为尝试在二进制电路上使用 base 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 字符串表示,必须将刚才提到的两种方法结合起来,如以下示例所示:
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)
此方法以第二个参数指定的基数返回第一个参数的字符串表示形式。
如果基数小于Character.MIN_RADIX
或大于Character.MAX_RADIX
,则使用基数 10 代替。
如果第一个参数为负,则结果的第一个元素是 ASCII 减号字符'-'
( '\u002D'
)。如果第一个参数不是负数,则结果中不会出现符号字符。
结果的其余字符表示第一个参数的大小。如果幅度为零,则由单个零字符'0'
( '\u0030'
) 表示;否则,幅度表示的第一个字符将不是零字符。以下 ASCII 字符用作数字:
0123456789abcdefghijklmnopqrstuvwxyz
这些都是彻头彻尾'\u0030'
的。如果 radix 为 N,则这些字符中的前 N 个字符按所示顺序用作 radix-N 位。因此,十六进制(基数 16)的数字是 0123456789abcdef。如果需要大写字母,可以在结果上调用该方法:'\u0039'
'\u0061'
'\u007A'
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
此方法将字符串参数解析为第二个参数指定的基数中的有符号整数。字符串中的字符必须都是指定基数的数字(由是否Character.digit(char, int)
返回非负值来决定),除了第一个字符可以是 ASCII 减号'-'
('\u002D'
)表示负值或 ASCII 加号'+'
('\u002B'
)表示负值表示正值。返回结果整数值。
如果发生以下任何一种情况,则会引发 NumberFormatException 类型的异常:
第一个参数是
null
或长度为零的字符串。基数小于
Character.MIN_RADIX
或大于Character.MAX_RADIX
。字符串的任何字符都不是指定基数的数字,除非第一个字符可以是减号
'-'
('\u002D'
) 或加号'+'
('\u002B'
),前提是字符串的长度大于 1。字符串表示的值不是 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
提供了两种提供此功能的实用方法,尽管字符串是转换的媒介:
请注意,Integer
内部以十进制形式存储值(以 10 为底)。
例如,要将 01000(八进制)转换为 512(十进制)并返回,您可以执行以下操作:
String octal = "01000";
int i = Integer.parseInt(octal, 8);
String decimal = Integer.toString(i, 10);
System.out.println(decimal); // prints 512
例如,您可以使用Integer.parseInt("101", 2)
它,它会给您 5(对应的十进制数)。
当使用第二个参数给出的基数进行解析时,返回一个 Integer 对象,该对象包含从指定 String 中提取的值。第一个参数被解释为表示由第二个参数指定的基数中的有符号整数,就像将参数提供给 parseInt(java.lang.String, int) 方法一样。结果是一个表示字符串指定的整数值的 Integer 对象。换句话说,此方法返回一个等于以下值的 Integer 对象: ( source )
new Integer(Integer.parseInt(s, radix))
从同一来源,您还拥有:
public static String toString(int i,int radix)
以第二个参数指定的基数返回第一个参数的字符串表示形式。
所以如果你想从二进制转换为十进制:
Integer.parseInt(binary_number_in_string, 2);
如果你想从十进制到二进制:
System.out.println(Integer.toString(2,2));
要从另一个基数转换为十进制数,反之亦然,您只需更改 radix 参数。
请注意,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)。
从上述方法的返回类型可以看出,基数之间转换的不是整数。这些方法在整数传递的给定基数中返回字符串表示形式作为参数。