使用char数组从十进制转换为二进制,八进制,十六进制

时间:2017-11-08 12:14:57

标签: java arrays binary hex decimal

我已将一些十进制数转换为二进制,八进制和十六进制系统。为此,我没有必要使用任何集合和库。所以现在我需要更改我的实现,因为我使用String来存储结果,而我应该使用char数组。

我目前的实施:

public static String convertDecimal(int number, int base){
    String result = "";
    while (number > 0) {
        if (base == 16) {
            int hexalNumber = number % base;

            char hexDigit = (hexalNumber <= 9 && hexalNumber > 0) ? 
                    (char) (hexalNumber + '0') : 
                    (char) (hexalNumber - 10 + 'A');
            result = hexDigit + result;
            number = number / base;
        }
        if (base == 8 || base == 2) {
            int remainder = number % base;
            result = remainder + result;
            number = number / base;
        }
    }
    return result;
}

如何更改我的实现以便从方法返回char []?我应该完全改变转换算法的逻辑吗?

如果有任何帮助,我将不胜感激。

3 个答案:

答案 0 :(得分:1)

String有一种将自身转换为char[]的方法,只需使用它:

return result.toCharArray();

答案 1 :(得分:1)

如果他们想要一个char数组,他们可能不会只喜欢

return result.toCharArray();

由于数组具有固定大小,因此可以先计算数字:

public static char[] convertDecimal(int number, int base) {
    if (number < 0) {
        char[] positiveResult = convertDecimal(-number, base);
        char[] negativeResult = ...
        return negativeResult;
    } else if (number == 0) {
        return new char[] { '0' };
    }
    int digits = 0;
    int n = number;
    while (n != 0) {
        ++digits;
        n /= base;
    }
    char[] result = new char[digits];
    for (int i = 0; i < digits; ++i) {
        ... result[... i ...] = ...; ++i
    }
    return result;
}

答案 2 :(得分:0)

我已在您的代码中对此进行了测试:

convertDecimal(7856421, 16);

对于这个电话和编辑你的代码如下(我没有删除任何一行,只添加了我添加了汽车[]):

public static String convertDecimal(int number, int base) {
char[] resultChar = new char[0];
String result = "";

while (number > 0) {
    if (base == 16) {
    int hexalNumber = number % base;

    char hexDigit = (hexalNumber <= 9 && hexalNumber > 0) ? (char) (hexalNumber + '0')
        : (char) (hexalNumber - 10 + 'A');
    result = hexDigit + result;
    int totalLength = resultChar.length + 1;
    char[] aux = new char[totalLength];
    int i = 0;
    for (i = 0; i < resultChar.length; i++) {
        aux[i] = resultChar[i];
    }
    aux[totalLength - 1] = hexDigit;
    resultChar = aux;

    number = number / base;
    }
    if (base == 8 || base == 2) {
    int remainder = number % base;
    result = remainder + result;

    number = number / base;
    }

}
return result;
}

Yo在resultChar []中反转结果(在这种情况下,你得到77E125,char []有[5,2,1,E,7,7])。现在你只需要将它倒回来。