我有一个字节数组。我想通过改变一位,两位和三位来模拟损坏的数据。
我该怎么做?
答案 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