在Java中将布尔数组打包为int
我不太熟悉这个过程中涉及到的所有比特变换和掩码,但我有一个模糊的想法在Java中将布尔数组打包为int,java,Java,我不太熟悉这个过程中涉及到的所有比特变换和掩码,但我有一个模糊的想法 我正在寻找一种将大约30个布尔值打包成int或long的方法,这样我就可以通过一种数据类型发送打包的数据,而不是跨30个单独的布尔值发送数据。如果可能的话,或者使用位集可能会有所帮助。我想知道是否有人能给我一些关于如何打包值的见解。一个布尔值代表一点信息,30个布尔值代表30位信息。构建一个int(32位),发送它,任务完成 可能不是最好的方法,但只是给你一个想法 int i=0; boolean[]a = {
我正在寻找一种将大约30个布尔值打包成int或long的方法,这样我就可以通过一种数据类型发送打包的数据,而不是跨30个单独的布尔值发送数据。如果可能的话,或者使用位集可能会有所帮助。我想知道是否有人能给我一些关于如何打包值的见解。一个布尔值代表一点信息,30个布尔值代表30位信息。构建一个
int
(32位),发送它,任务完成
可能不是最好的方法,但只是给你一个想法
int i=0;
boolean[]a = {true,false,true,false,false,false,false};
for(boolean b:a)i=i*2+(b?1:0);
System.out.println(Integer.toBinaryString(i));
印刷品
1010000
如果你有一个布尔b[30]列表,你可以声明一个
int x=0
并在b中迭代,每次迭代都执行x=x*2//移动到下一位
并且x=x+1//如果b为真
Boolean b[30]; // assign values to array...
int x = 1;
for (int i=0; i<30; i++){
if (b[i] == true ){
x = x+1;
}
x = x*2;
}
布尔b[30];//给数组赋值。。。
int x=1;
对于(int i=0;i请尝试以下方法:
boolean b[] = new boolean[32];
b[2] = true;
b[31] = true;
int m = 0x01;
int n = 0;
for(int j = b.length - 1; j >=0; j--) {
if(b[j]) n |= m;
m = (m<< 1);
}
System.out.println(Integer.toBinaryString(n));
// Output: 100000000000000000000000000001
boolean b[]=新的boolean[32];
b[2]=真;
b[31]=正确;
int m=0x01;
int n=0;
对于(int j=b.length-1;j>=0;j--){
如果(b[j])n |=m;
m=(m如果您有一个int
(32位),您可以像这样设置、清除和检查第N(0-31)位:
int bits = 0;
// Set bit n
bits |= 1 << n;
// Clear bit n
bits &= (1 << n) ^ -1;
// Check bit n
if ((bits & 1 << n) != 0) { /*bit was set*/ }
要将位掩码转换为布尔数组,请执行以下操作:
int bits = /*assigned elsewhere*/;
boolean[] bools = new boolean[30]; /*max. length: 32*/
for (int i = 0; i < bools.length; i++)
if ((bits & 1 << i) != 0)
bools[i] = true;
int位=/*分配到别处*/;
布尔值[]布尔值=新布尔值[30];/*最大长度:32*/
for(int i=0;i 如果((bits&1如果排序不重要,我会做的最新的技术就是简单地将0和1的布尔结果附加到一个字符串中并发送过来。下面的所有答案都是有意义的,但是你打算如何读取这个1和0的数据结构?可能的重复我正在寻找最有效的方法当然,出于学习目的,因为我对位操作不太了解,是的,它们需要订购,并且在收到时需要解包,以便使用值。谢谢,是的,我收集了这些,但我更关心的是打包/解包或“构建”aspectThat works.这对解包也有效吗?因为我必须读回数据,并在数据到达服务器时进行验证。您的结果int将是:1嗨,感谢演示。由于我也是出于学习目的而这样做的,您能解释一下这里发生的移位吗?比如if((位&1
int bits = /*assigned elsewhere*/;
boolean[] bools = new boolean[30]; /*max. length: 32*/
for (int i = 0; i < bools.length; i++)
if ((bits & 1 << i) != 0)
bools[i] = true;