如何将整数值转换为';n';java中的数字ascii字节数组
是在java中将整数值转换为“n”位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} 我在网上搜索没有找到任何方法。请帮助我我想你确切的问题是如何将一
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
。这对我来说是个不错的解决方案!