[英]Converting char array to int array without a loop in Java?
我需要获取矩阵内一系列数字的二进制表示形式,以便对另一个向量执行某些操作。
假设我将获得2 ^ 4数字的二进制表示形式,即从0到15。我知道我需要一个16x4的矩阵。
我有以下代码:
int [][] a = new int[15][4];
for (int i = 0; i < a.length; i++) {
a[i] = String.format("%5s", Integer.toBinaryString(i)).replace(' ', '0').toCharArray();
}
因此,作为二进制格式的数字char[]
的数组表示形式,我不能仅仅将其赋给a[i]
。
是否有任何方法可以在不循环通过char数组的情况下执行转换?
不是我知道的。 如果您绝对不希望遍历char数组,则可以通过几种不同的方法来执行此操作,即遍历二进制字符串的整数表示形式,并为每一步取num%10
和num/10
。 但是,在这种情况下,循环遍历char数组似乎很简单。 无论如何,这里是解决方案,我猜你以您不想要的方式...
int [][] a = new int[16][4];
for (int i = 0; i < a.length; i++) {
char[] cArr = String.format("%4s", Integer.toBinaryString(i)).replace(' ', '0').toCharArray();
for(int j = 0; j < a[0].length; j++)
a[i][j] = Integer.parseInt(cArr[j]+"");
}
这是您要完成的工作的简单解决方案。
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
a[i][a[0].length - 1 - j] = (i & (1 << j)) != 0 ? 1 : 0;
}
}
您可以执行以下操作,而不是将整数i转换为String,然后将零替换为零,然后再将其转换为array:
拿我
取一个二进制数A,在第j个位置上唯一的1(其他为零):A =(1 << j)
对您的数字和数字A进行相加(二进制按位乘法)。这可以通过以下方式实现:(i&A)
如果该位置有一个非零位,则在相加后将得到A。如果有零位,则将得到0。
如果结果不为零,则我在第j个位置具有非零位。 否则,那里零。
使用按位运算的解决方案也将更快。
我相信仍然需要一个外部循环来遍历char[][]
rows 。
int[] charArray2intArray(char[][] binary) {
int[] numbers = new int[binary.length];
int row = 0;
for (char[] number: binary) {
String bin = new String(number);
numbers[row++] = Integer.parseInt(bin, 2);
}
return numbers;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.