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