2010-04-24 5 views
1

J'ai un tableau d'octets. Je veux simuler des données corrompues en changeant un bit, deux et trois bits.Changement de bits dans un tableau d'octets

Comment faire?

+0

La colonne « associée » à droite montre les doublons possibles suivants: http://stackoverflow.com/questions/1956160/good-tutorials-on-bitwise-operations-in- java, http://stackoverflow.com/questions/560956/bitwise-and-bitwise-inclusive-or-question-in-java –

Répondre

2

Utilisez le XOR (^) opérateur:

// 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 
} 
0

La manière habituelle de mettre un peu dans la plupart des langues est à « ou » (|) avec un masque de bits avec seulement bit, et La manière habituelle de désarmer c'est de 'et' (&) avec un masque de bits sans que ce jeu de bits.

donc faire 8 ensemble des masques de bits

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

et 8 « et » masques de bits

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

Pour définir la première utilisation de bits (supposons tableau est un tableau d'octets et i est un nombre entier)

array[i] |= setbm1 

pour la désélectionner

array[i] ^= setbm1 

Sinon, vous pouvez utiliser http://java.sun.com/javase/6/docs/api/java/util/BitSet.html

Questions connexes