更改字节数组中的位

时间:2010-04-24 15:24:44

标签: java bit-manipulation

我有一个字节数组。我想通过改变一位,两位和三位来模拟损坏的数据。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

使用BitSet

答案 1 :(得分:2)

使用xor(^)运算符:

// Generate some data.
byte[] b = new byte[1024];
new Random().nextBytes(b);

// Simulate corruption of data by flipping the low 3 bits.
for (int i = 0; i < b.length; i++) {
  //b[i] ^= 0x1; // change one bit
  //b[i] ^= 0x3; // change two bits
  b[i] ^= 0x7; // change three bits
}

答案 2 :(得分:0)

在大多数语言中设置位的常用方法是'或'(|)使用位掩码只设置该位,并且通常的方法是将其设置为'和'(&amp;)它与没有设置该位的位掩码。

所以制作8个设置位掩码

byte setbm1 = 1; //00000001
byte setbm2 = 1 >>1;
byte setbm3 = 1>>2;
...
...
byte setbm8 = 1>>7; //10000000

和8'以及'位掩码

byte unsetbm1 ^= setbm1; //11111110
..
..
byte unsetbm1 ^= setbm8; //01111111

设置第一位使用(假设数组是字节数组,i是整数)

array[i] |= setbm1

取消设置

array[i] ^= setbm1

否则您可以使用http://java.sun.com/javase/6/docs/api/java/util/BitSet.html