如何将字节数组划分为位

时间:2013-05-08 11:33:13

标签: java bit-manipulation bit

如何在字节数组中存储两个数字或将位设置在不同的位置? 比如将数组分成两个块。 一个5位的块和3个位置的第二个。 所以存储6和3看起来像:

      num:            6                 3
      bit       7 - 6 - 5 - 4 - 3 || 2 - 1 - 0
      bin       0 - 0 - 1 - 1 - 0 || 0 - 1 - 1


      byte[] byte = new byte[1];

      int x = 6;  // bin 00000110
      int y = 3;  // bin 00000011

      byte[0] = (byte)(x >> 8)
      byte[0] = (byte)(y >> 2);

这不起作用。

2 个答案:

答案 0 :(得分:1)

确认您存储的信息如下:xxxxxyyy

x = 31; //x must be between [0,31]  `000 11111`
y = 7;  //y must be between [0,7]   `00000 111`

z = (x << 3) | y;


x = (z & 0xF8) >> 3;
y = z & 0x07;

答案 1 :(得分:1)

移动(左,不是!)将底部位置放在一起所需的量,或者将结果放在一起:

byte[0] = (byte)((x<<3) | y);    // x needs to move 3 to make room for y

如果可能存在伪位,请在移位之前使用位掩码清除数字:

byte[0] = (byte)(((x&0x1F)<<3) | (y&0x3));