如何将整数值转换为' n' java中的数字ascii字节数组

时间:2016-05-27 06:49:03

标签: java android type-conversion

是否有任何方法可将整数值转换为' n' java中的数字ascii字节数组。像

IntToBytes( int value, int digits );

int a = 1234;
IntToBytes( a, 4 );
results will be byte array of {1, 2, 3, 4}

IntToBytes( a, 5 );
results will be byte array of {0, 1, 2, 3, 4}

我在网上搜索没找到任何方法。请帮帮我

6 个答案:

答案 0 :(得分:1)

我认为您的确切问题是如何将int数字表示转换为十进制表示法中的一系列数字。

我不知道任何现有的(即库)方法,但您可以使用其中一种显而易见的方法轻松编写自己的方法。其中一个就是重复从分裂中取出余数(a.k.a.Horner的方法)。另一个可能是将int转换为String,然后通过转换将此String个字符转换为bytes

答案 1 :(得分:1)

您可以使用String.format()功能

该示例可能对您有所帮助

    String s = String.format("%06d", 1234);
    System.out.println(s.toCharArray());

希望有所帮助

答案 2 :(得分:1)

直接从我的项目Euler库。 :)

算法执行mod 10获取最后一位数字,然后将10除以shift数字右侧并删除最后一位数字。这一直重复到零。在我的算法中,我返回一个数组,因此我使用log10来获取确切的位数。您可以选择将其固定在while循环中并除以10,直到等于0并将mod 10附加到List。

public static int[] getDigits(long n) {
    final int digits = numDigits(n);
    final int[] d = new int[digits];
    int i = 0;
    while (n > 0) {
        d[i] = (int)(n % 10);
        n /= 10;
        i++;
    }
    return d;
}

public static int numDigits(final long n) {
    return (int) Math.log10(n) + 1;
}

调整它以返回一个字节数组应该是非常简单的。

答案 3 :(得分:1)

如果要获取具有十进制表示法数字值的数组,可以创建如下函数:

public static byte[] intToBytes(int number, int digits) {
    byte[] results = new byte[digits];
    /* Start at the end of the array. i.e. 1234, should be converted to {1, 2, 3, 4} */
    for (int i = digits - 1; i >= 0; i--) {
        results[i] = (byte) (number % 10);
        number = number / 10;
    }
    return results;
}

如果你想要的是一个带有每个数字的ascii值的数组,你可以使用String.format并将String转换为字节数组。

(1234应转换为{' 1',' 2',' 3',' 4'} .ascii值将是{49,50,51,52}

代码可以是:

public static byte[] intToBytes(int number, int digits) {
    String format = "%0" + digits + "d";
    String numberAsString = String.format(format, number);
    char[] numberAsCharArray = numberAsString.toCharArray();
    byte[] result = new byte[digits];
    for (int i = 0; i < numberAsCharArray.length; i++) {
        result[i] = (byte) numberAsCharArray[i];
    }
    return result;
}

答案 4 :(得分:0)

在apache commons lang中,有一个类org.apache.commons.lang3.Conversion,其方法为longToByteArray。这可能对您尝试做的事情有所帮助。

答案 5 :(得分:0)

我认为你应该使用模数运算。 您必须创建一个数字大小的char数组,然后从末尾迭代,在该位置插入值%10 - '0'(最后一位数转换为char)并在每次迭代中将值除以10。当value = 0时,您只需在剩余位置插入“0”。