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