0

I have two integer a, b and a loop like this:

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

how can i do this when a and b are stored in char arrays?

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

3 回答 3

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' 也是一个数组,这很容易做到,但您可能必须在内存中分配它并返回一个指向内存的指针。

于 2012-11-01T19:50:36.097 回答
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”数组的其余部分做什么

于 2012-11-01T18:36:35.500 回答
0

由于 a 和 b 现在是数组,因此您必须首先索引并取消引用要使用的元素。因此,例如,而不是

c ^= (a << i);

你可以这样做:

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

请注意,由于 ^= 取决于先前的值,因此 c[i] 应该在开始之前初始化为有意义的值。

于 2012-11-01T18:37:11.803 回答