我有两个整数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;
}
}
}
答案 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;也是一个数组,这很容易做到,但你可能不得不在内存中分配并返回指向内存的指针。