Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反向工程toBinaryString和toHexString_Java - Fatal编程技术网

Java 反向工程toBinaryString和toHexString

Java 反向工程toBinaryString和toHexString,java,Java,我要写一个程序,将输入从八进制转换成二进制或十六进制,但我不能使用预先编写的API例程为我做转换。我想我最好的办法是对它们进行反向工程,看看它们是如何工作的。有没有人知道可以提供这些信息或其他建议的来源?谢谢大家! 您需要从基础开始,即将十进制数转换为二进制数。这个过程很容易。然后,你可以继续你所说的,因为这个过程是相似的 正如其他人已经指出的,源代码与jdk捆绑在一起。如果您下载intelliJ,那么您可以控制对任何类的单击 另外,只需在谷歌上搜索“java语言整数的源代码” 我做到了,它提出

我要写一个程序,将输入从八进制转换成二进制或十六进制,但我不能使用预先编写的API例程为我做转换。我想我最好的办法是对它们进行反向工程,看看它们是如何工作的。有没有人知道可以提供这些信息或其他建议的来源?谢谢大家!

您需要从基础开始,即将十进制数转换为二进制数。这个过程很容易。然后,你可以继续你所说的,因为这个过程是相似的


正如其他人已经指出的,源代码与jdk捆绑在一起。

如果您下载intelliJ,那么您可以控制对任何类的单击

另外,只需在谷歌上搜索“java语言整数的源代码”

我做到了,它提出:

这就是使用JDK的基本方法(正如有人指出的):

为了好玩,我做了八进制问题:

    int octal = 037;

    System.out.println(octalToHexString(octal));

    int octal = 037;

    System.out.println(octalToHexString(octal));

}

public static String octalToHexString(int octal) {

    final  char[] hex = {
            '0' , '1' , '2' , '3' , '4' , '5' ,
            '6' , '7' , '8' , '9' , 'A' , 'B' ,
            'C' , 'D' , 'E' , 'F'
    };


    int val = octal;
    int radix = 0;
    int mask = 0;

    StringBuilder builder = new StringBuilder("0x");

    if (val==0) {
        return "0x" + 0;
    }

    while (val != 0) {

        radix = 1 << 4;
        mask = radix - 1;
        builder.insert(2, hex[val & mask]);
        val >>>= 4;
    }

    return builder.toString();

}
int八进制=037;
System.out.println(八进制字符串(八进制));
整数八进制=037;
System.out.println(八进制字符串(八进制));
}
公共静态字符串octalToHexString(int-octal){
最终字符[]十六进制={
'0' , '1' , '2' , '3' , '4' , '5' ,
‘6’、‘7’、‘8’、‘9’、‘A’、‘B’,
“C”、“D”、“E”、“F”
};
int val=八进制;
int基数=0;
int-mask=0;
StringBuilder=新的StringBuilder(“0x”);
如果(val==0){
返回“0x”+0;
}
while(val!=0){
基数=1>>=4;
}
返回builder.toString();
}
上述方法效率不高。:)

以下是JDK for int的解析器:

public static int parseInt(String s, int radix)
            throws NumberFormatException
{
    /*
     * WARNING: This method may be invoked early during VM initialization
     * before IntegerCache is initialized. Care must be taken to not use
     * the valueOf method.
     */

    if (s == null) {
        throw new NumberFormatException("null");
    }

    if (radix < Character.MIN_RADIX) {
        throw new NumberFormatException("radix " + radix +
                                        " less than Character.MIN_RADIX");
    }

    if (radix > Character.MAX_RADIX) {
        throw new NumberFormatException("radix " + radix +
                                        " greater than Character.MAX_RADIX");
    }

    int result = 0;
    boolean negative = false;
    int i = 0, len = s.length();
    int limit = -Integer.MAX_VALUE;
    int multmin;
    int digit;

    if (len > 0) {
        char firstChar = s.charAt(0);
        if (firstChar < '0') { // Possible leading "+" or "-"
            if (firstChar == '-') {
                negative = true;
                limit = Integer.MIN_VALUE;
            } else if (firstChar != '+')
                throw NumberFormatException.forInputString(s);

            if (len == 1) // Cannot have lone "+" or "-"
                throw NumberFormatException.forInputString(s);
            i++;
        }
        multmin = limit / radix;
        while (i < len) {
            // Accumulating negatively avoids surprises near MAX_VALUE
            digit = Character.digit(s.charAt(i++),radix);
            if (digit < 0) {
                throw NumberFormatException.forInputString(s);
            }
            if (result < multmin) {
                throw NumberFormatException.forInputString(s);
            }
            result *= radix;
            if (result < limit + digit) {
                throw NumberFormatException.forInputString(s);
            }
            result -= digit;
        }
    } else {
        throw NumberFormatException.forInputString(s);
    }
    return negative ? result : -result;
}
公共静态int-parseInt(字符串s,int基数)
抛出NumberFormatException
{
/*
*警告:此方法可能在VM初始化的早期调用
*在初始化IntegerCache之前。必须注意不要使用
*方法的价值。
*/
如果(s==null){
抛出新的NumberFormatException(“null”);
}
if(基数<字符最小基数){
抛出新的NumberFormatException(“基数”+基数+
“小于字符。最小基数”);
}
if(基数>字符最大基数){
抛出新的NumberFormatException(“基数”+基数+
“大于字符的最大基数”);
}
int结果=0;
布尔负=假;
int i=0,len=s.length();
int limit=-Integer.MAX_值;
int multmin;
整数位数;
如果(len>0){
char firstChar=s.charAt(0);
if(firstChar<'0'){//可能的前导“+”或“-”
if(firstChar=='-'){
负=真;
限制=整数.MIN_值;
}else if(firstChar!='+'))
抛出NumberFormatException.forInputString;
if(len==1)//不能有单独的“+”或“-”
抛出NumberFormatException.forInputString;
i++;
}
multmin=极限/基数;
而(我
源代码本身如何?请原谅,我是新手,不知道在哪里可以找到源代码。Java是开源的。您可以看到所有it方法的源代码。不要进行反向工程。好好想想!你正在学习如何编程。这就是:学习如何用代码解决问题。不:查找已经解决它的代码。这就像一个知道如何建造埃菲尔铁塔的建筑师。如果你不能使用预先编写好的API例程,它就不再有用了。如果你认为你可以直接使用它们的源代码,那就太愚蠢了。你应该从这个练习中学到一些东西,而不仅仅是抄袭答案。
public static int parseInt(String s, int radix)
            throws NumberFormatException
{
    /*
     * WARNING: This method may be invoked early during VM initialization
     * before IntegerCache is initialized. Care must be taken to not use
     * the valueOf method.
     */

    if (s == null) {
        throw new NumberFormatException("null");
    }

    if (radix < Character.MIN_RADIX) {
        throw new NumberFormatException("radix " + radix +
                                        " less than Character.MIN_RADIX");
    }

    if (radix > Character.MAX_RADIX) {
        throw new NumberFormatException("radix " + radix +
                                        " greater than Character.MAX_RADIX");
    }

    int result = 0;
    boolean negative = false;
    int i = 0, len = s.length();
    int limit = -Integer.MAX_VALUE;
    int multmin;
    int digit;

    if (len > 0) {
        char firstChar = s.charAt(0);
        if (firstChar < '0') { // Possible leading "+" or "-"
            if (firstChar == '-') {
                negative = true;
                limit = Integer.MIN_VALUE;
            } else if (firstChar != '+')
                throw NumberFormatException.forInputString(s);

            if (len == 1) // Cannot have lone "+" or "-"
                throw NumberFormatException.forInputString(s);
            i++;
        }
        multmin = limit / radix;
        while (i < len) {
            // Accumulating negatively avoids surprises near MAX_VALUE
            digit = Character.digit(s.charAt(i++),radix);
            if (digit < 0) {
                throw NumberFormatException.forInputString(s);
            }
            if (result < multmin) {
                throw NumberFormatException.forInputString(s);
            }
            result *= radix;
            if (result < limit + digit) {
                throw NumberFormatException.forInputString(s);
            }
            result -= digit;
        }
    } else {
        throw NumberFormatException.forInputString(s);
    }
    return negative ? result : -result;
}