Изменение битов в массиве байтов - PullRequest
1 голос
/ 24 апреля 2010

У меня есть массив байтов. Я хочу симулировать поврежденные данные, меняя один, два и три бита.

Как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 24 апреля 2010

Используйте оператор 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 голосов
/ 24 апреля 2010

Используйте BitSet.

0 голосов
/ 24 апреля 2010

Обычный способ установить бит в большинстве языков - это 'или' (|) с битовой маской, в которой установлен только этот бит, а обычный способ его сброса - это 'и' (&) с битовая маска без установленного бита.

Итак, сделайте 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

Для установки первого бита (предположим, что массив - это байтовый массив, а я - целое число)

array[i] |= setbm1

чтобы сбросить его

array[i] ^= setbm1

В противном случае вы можете использовать http://java.sun.com/javase/6/docs/api/java/util/BitSet.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...