0

如何将两个数字存储在一个字节数组中或将位设置在不同的位置?就像将数组分成两个块。一个 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);

这行不通。

4

2 回答 2

1

Assyming 您将您的信息存储为: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;
于 2013-05-08T11:35:20.280 回答
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));
于 2013-05-08T11:35:46.527 回答