Java 布尔值数组,一个数字,一个倒数
我需要将一个布尔数组(30个或更多)转换成一个数字,以将其保存在db表的一个单元格中,我想使用java,但不使用DBs的本机函数。 所以,帮我把,比如,10变成[1,3]再回来。Java 布尔值数组,一个数字,一个倒数,java,boolean,bitwise-operators,bit-shift,Java,Boolean,Bitwise Operators,Bit Shift,我需要将一个布尔数组(30个或更多)转换成一个数字,以将其保存在db表的一个单元格中,我想使用java,但不使用DBs的本机函数。 所以,帮我把,比如,10变成[1,3]再回来。 (10=0^0+2^1+0^2+2^3您可以在int中编码多达32个布尔值,如下所示(该方法在32个布尔值上不会出错,但无法正确解压): 但是请注意,您没有对数组的长度进行编码-没有可靠的方法重建数组的长度,您需要提前知道它,或者将它存储在数据库中。如果以后将int解包为布尔值,则数组的长度将为32booleans。但
(10=0^0+2^1+0^2+2^3您可以在
int
中编码多达32个布尔值,如下所示(该方法在32个布尔值上不会出错,但无法正确解压):
但是请注意,您没有对数组的长度进行编码-没有可靠的方法重建数组的长度,您需要提前知道它,或者将它存储在数据库中。如果以后将int解包为布尔值,则数组的长度将为32
booleans。但是,如果编码了30
bools,则可以忽略前2个
或者如果您知道数组的长度:
public static boolean[] unpack (int n, int length) {
boolean[] res = new boolean[length];
for(int i = length-1; n != 0x00 && i >= 0; i--) {
if((n&0x01) != 0x00) {
res[i] = true;
}
n >>>= 0x01;
}
return res;
}
请参阅此演示。感谢您的回复,但这不是我想要的:我需要将许多布尔值(让它们为1和0)保留为一个十进制值啊,好吧。。。。那么走相反的路?那么,您是否有一个布尔值的数组,或者您是否有一个整数数组,可以为您提供位的开/关位置?您的要求和示例相互矛盾。
public static boolean[] unpack (int n) {
boolean[] res = new boolean[32];
for(int i = 31; n != 0x00; i--) {
if((n&0x01) != 0x00) {
res[i] = true;
}
n >>>= 0x01;
}
return res;
}
public static boolean[] unpack (int n, int length) {
boolean[] res = new boolean[length];
for(int i = length-1; n != 0x00 && i >= 0; i--) {
if((n&0x01) != 0x00) {
res[i] = true;
}
n >>>= 0x01;
}
return res;
}