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 */
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 */
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;
}
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;
}
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