API中用于在碱基之间转换的方法是什么?

时间:2012-11-30 23:31:03

标签: java api integer base

您可以使用什么方法在Java中进行基数转换?它类似于IntegerToBase(int,base),但我不记得了。

3 个答案:

答案 0 :(得分:14)

从字面上讲,整数值不会从一个基数转换为另一个基数。感谢von Neumann,计算机的先驱之一,他认为尝试在二进制电路上使用基数10算法的想法没有多大意义,整数以二进制格式存储,我们不是要改变它:-)我们是什么所谓的是将它们转换为在某个基础上表示它们的字符串(除了默认的基数10之外),并将字符串转换为除(默认)基数10以外的基数中的整数。必要的工具是Integer类的静态方法。 / p>

  • 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''\u0039''\u0061''\u007A'。如果radix为N,则这些字符中的前N个按所示顺序用作基数-N数字。因此,十六进制(基数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

此方法将字符串参数解析为第二个参数指定的基数中的有符号整数。字符串中的字符必须都是指定基数的数字(由Character.digit(char, int)是否返回非负值确定),除了第一个字符可能是ASCII减号'-'({{1} })表示负值或ASCII加号'\u002D''+')表示正值。返回结果整数值。

如果发生以下任何一种情况,则抛出NumberFormatException类型的异常:

  • 第一个参数是'\u002B'或者是一个长度为零的字符串。

  • 基数小于null或大于Character.MIN_RADIX

  • 字符串的任何字符都不是指定基数的数字,除了第一个字符可能是减号Character.MAX_RADIX'-')或加号'\u002D''+'),条件是字符串长度为1。

  • 字符串表示的值不是int类型的值。

示例:

'\u002B'

来源:http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt%28java.lang.String,%20int%29

答案 1 :(得分:3)

例如,你可以使用Integer.parseInt("101", 2),它会给你5(对应的十进制数)。

  

返回一个Integer对象,其中包含从中提取的值   使用第二个给出的基数进行解析时指定的String   论点。第一个参数被解释为表示已签名   第二个参数指定的基数中的整数,就像是一样   参数被赋予parseInt(java.lang.String,int)   方法。结果是一个表示整数的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));

要从另一个基数转换为十进制,反之亦然,您只需更改基数参数。


请注意class Integer已经有一些默认的会话方法,例如:

public static String toBinaryString(int i) 

将整数参数的字符串表示形式返回为base 2中的无符号整数 (source)。

public static String toHexString(int i) 

将整数参数的字符串表示形式返回为基数为16(source)的无符号整数。

public static String toOctalString(int i) 

将整数参数的字符串表示形式返回为unsigned 基数为8的整数(source)。

从上面方法的返回类型可以看出,它不是在base之间转换的整数。这些方法将整数传递的给定基数中的String表示作为参数返回。

答案 2 :(得分:3)

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