array ... for循环

时间:2012-11-01 18:31:42

标签: c++

我有两个整数a,b和一个这样的循环:

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

当a和b存储在char数组中时,我该怎么做?

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

3 个答案:

答案 0 :(得分: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”数组的其余部分做什么,但

答案 1 :(得分:0)

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

c ^= (a << i);

你可以这样做:

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

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

答案 2 :(得分: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;
}

如果你想要&#39; c&#39;也是一个数组,这很容易做到,但你可能不得不在内存中分配并返回指向内存的指针。