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

如何将整数值转换为';n';java中的数字ascii字节数组,java,android,type-conversion,Java,Android,Type Conversion,是在java中将整数值转换为“n”位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} 我在网上搜索没有找到任何方法。请帮助我我想你确切的问题是如何将一

是在java中将整数值转换为“n”位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}

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

我想你确切的问题是如何将一个
int
数字表示法转换成十进制的一系列数字。


我不知道有任何现有的(即library)方法可用于此,但您可以使用其中一种显而易见的方法轻松编写自己的方法。其中之一是重复从除法中取余数(又称霍纳法)。另一种方法是将
int
转换为
String
,然后通过强制转换将
String
s字符转换为
bytes

在apache commons lang中有一个类
org.apache.commons.lang3.Conversion
,它有这个方法。这可能有助于您尝试执行的操作。

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

您可以使用
String.format()
函数

这个例子可能对你有帮助

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

希望这能直接从我的项目Euler库中得到帮助。(

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

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;
}

将其修改为返回字节数组应该非常简单。

如果您想获得以十进制表示法表示的数字值数组,可以创建如下函数:

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
并将字符串转换为字节数组

(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;
}
公共静态字节[]整数字节(整数编号,整数位数){
字符串格式=“%0”+位数+d”;
String numbersString=String.format(格式,数字);
char[]numberAsCharArray=numberAsString.toCharArray();
字节[]结果=新字节[位数];
for(int i=0;i
数学将是一门又快又好的课程approach@KevinEsche你的意思是“分割和提醒”方法注意,
'a'
等不是
字节
s,它们是
字符
s。你的意思是
(字节)0
,还是
(字节)“0”
,或者其他什么?你是说字符数组?ascii是映射到特定数字的符号。你希望从输入中得到什么输出:
IntToBytes(a,7)
?@AndyTurner我编辑的问题最快的是
byte digit=a-a/10
。记得在每次迭代后用
/=10
@LukeSamuel修改
a
。@LukeSamuel你说的“byte digit=a-a/10”是什么意思?克里希纳:卢克·塞缪尔是霍纳的方法;这个名字见我的帖子和谷歌。我的错,应该是
te digit=a-a/10*10
a%10
。这对我来说是个不错的解决方案!