【问题标题】:What is the method in the API for converting between bases?API中用于在基础之间转换的方法是什么?
【发布时间】:2012-11-19 05:33:50
【问题描述】:

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

【问题讨论】:

    标签: java api integer base


    【解决方案1】:

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

    返回一个 Integer 对象,其中包含从 使用第二个给出的 radix 解析时指定的 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) 
    

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

    public static String toHexString(int i) 
    

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

    public static String toOctalString(int i) 
    

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

    从上述方法的返回类型可以看出,基数之间转换的不是整数。这些方法以整数传递的给定基数作为参数返回字符串表示形式。

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 我没有检查但基本算术告诉我八进制 100 不能等于十进制 512,更像是 64。
      • @mazaneicha 你说的是数字的字符串表示,而不是数字。
      • @Sulthan String "0100" 解释为八进制数将产生十进制数 64。如果在末尾添加一个“0”——“01000”——它将是十进制数 512。我试图指出的响应中只是一个简单的错字..
      • @mazaneicha 不错,cHao 似乎已将其编辑为具有正确的八进制/十进制值。
      【解决方案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''\u0039''\u0061''\u007A'。如果 radix 为 N,则这些字符中的前 N ​​个字符按所示顺序用作 radix-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减号'-''\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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        相关资源
        最近更新 更多