2013-06-05 3 views
-2

Je dois effectuer un OU bit à bit de deux tableaux d'octets en Java. Comment puis-je le faire?OU bit à bit (sur le tableau)

byte a= new byte[256]; 
byte b= new byte[256]; 

byte c; /*it should contain information i.e bitwise OR of a and b */ 

Répondre

1

Je pense que le mieux est d'utiliser un BitSet. Cette classe a déjà une méthode void or(BitSet bs) à utiliser.

byte a = new byte[256]; 
byte b = new byte[256]; 
byte c = new byte[256]; 
BitSet bsa = new BitSet(); 
BitSet bsa = new BitSet(); 
//fill BitSets with values from your byte-Arrays 
for(int i = 0; i < a.length * 8; i++) 
    if((a[i/8] & (1 << 7-i%8)) != 0) 
     bsa.set(i); 
for(int i = 0; i < a.length * 8; i++) 
    if((b[i/8] & (1 << 7-i%8)) != 0) 
     bsb.set(i); 
//perform OR 
bsa.or(bsb); 
//write bsa to byte-Array c 
for(int i = 0, byte h; i < a.length; i++){ 
    h = 0; 
    for(int j = 7; j >= 0; j++){ 
     if(bsa.get(i*8 + 7 - j)) 
      h = h | (1 << j); 
    } 
    c[i] = h; 
} 
+0

Ce serait bien si quelqu'un pouvait tester cela. Malheureusement, je ne peux pas le tester maintenant, mais je suis sûr que cela fonctionne. Vous êtes également invités à modifier! – johk95

2

C'est aussi simple que d'utiliser le | opérateur et une boucle:

public static byte[] byteOr(byte[] a, byte[] b) { 
    int len = Math.min(a.length, b.length); 
    byte[] result = new byte[len]; 
    for (int i=0; i<len; ++i) 
     result[i] = (byte) (a[i] | b[i]) 
    return result; 
}