2013-06-05 68 views
-2

我需要在Java中執行兩個字節數組的按位或。我該怎麼做?按位或(在數組上)

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

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

回答

1

我認爲你最好的選擇是使用BitSet。 該課程已使用void or(BitSet bs)方法。

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

這將是很好,如果有人可以測試這一點。不幸的是,我現在無法測試它,但我確信它的工作原理。您也歡迎編輯! – johk95

2

這就像使用|運營商和一個循環:

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