2012-11-01 299 views
0

我有兩個整數a,b和這樣一個循環:陣列... for循環

for(int i=0 ;i<8 ;++i) 
{ 
    if((b & (0x01 << i)) != 0x00) 
    { 
     // 
     c ^= (a << i); 
    } 
} 

我怎麼能做到這一點,當A和B都存儲在字符數組?

unsigned char test (unsigned char* a[], unsigned char* b[]) 
{ 

    for(int i=0 ;i<8 ;++i) 
    { 
     if((b[i] & (0x01 << i)) != 0x00) 
     { 
      shiftleft(a); 
      c[i] ^= a; 
     } 
    } 
} 
+1

它應該以相同的操作方式工作。 這取決於shiftleft在做什麼,你可能想要c [i]^= * a; – Julian

+0

你應該完全使用更好的格式。 – Griwes

+0

這不是基本上相同的問題:[XORing兩個字符數組C++](http://stackoverflow.com/questions/13122988/xoring-of-two-char-arrays-c)?!? –

回答

0

我想 - 猜猜你想做什麼應該是。

unsigned char test (unsigned char* a[], unsigned char* b[]) 
{ 
    for(int i=0 ;i<8 ;++i) 
    { 
     if((b[i] & (0x01 << i)) != 0x00) 
     { 
      c[i] ^= (*a)<<i; 
     } 
    } 
} 

這取決於你想用「A」陣列雖然

0

的其餘部分由於A和B現在的陣列做什麼,你必須先索引和非關聯的元素,你要使用。因此,例如,而不是

c ^= (a << i); 

你可以這樣做:

c[i] ^= (a[i] << i); 

請注意,由於^ =依賴於前值,C [1]應該被初始化爲一些有意義的事情,然後再開始。

0

我想你想迭代你的數組,應用每個項目的位移。您將需要提供數組大小的計數。

unsigned char test (int count, unsigned char* a[], unsigned char* b[]) 
{ 
    char c = 0; 

    for(int iarray = 0; iarray < count; ++iarray) 
    { 
     for(int i=0 ;i<8 ;++i) 
     { 
      if((b[iarray] & (0x01 << i)) != 0x00) 
      { 
       c ^= (a[iarray] << i) 
      } 
     } 
    } 

    return c; 
} 

如果你想「c」來也是一個數組,這是很容易做到,但你可能會在內存中分配,並返回一個指向內存。