PARITY Parity(unsigned char* buf, int iBufLen)
{
int countones = 0;
int i;
int j;
unsigned char iMask = 0x80;
for (i = 0; i < iBufLen;)
{
for (j = 0; j < 8; j++)
{
if (*buf & iMask)
{
countones++;
}
iMask >>= 1;
}
if (iMask == 0)
{
iMask = 0x80;
i++;
buf++;
}
}
if (countones % 2 == 0)
{
return(PAR_EVEN);
}
else if (countones % 2 == 1)
{
return(PAR_ODD);
}
else
{
return(PAR_ERROR);
}
if (*buf & iMask)
{
countones++;
}
iMask = iMask >> 1;
}
这段代码是一个函数,名为Parity,它接受两个参数:一个unsigned char类型的指针buf和一个整数iBufLen。函数的作用是统计buf所指向的内存中1的个数,并根据1的个数的奇偶性返回PAR_EVEN、PAR_ODD或PAR_ERROR。
首先,定义了一个变量countones,用于记录1的个数。然后使用两重循环遍历buf所指向的内存中的每一个字节,第一重循环遍历buf的每一个字节,第二重循环遍历每一个字节的每一位。使用iMask变量来确定当前字节的哪一位需要判断,如果当前位为1,则countones计数器加1。
最后,根据countones的值的奇偶性返回PAR_EVEN、PAR_ODD或PAR_ERROR。
在第二重循环中,iMask变量每次右移一位,直到遍历完当前字节的所有位。如果iMask变量已经移动到了最低位,那么将iMask重置为0x80,并将buf指针向后移动一个字节。
在第一重循环中,每当i循环变量等于iBufLen时,整个buf所指向的内存都已经遍历完了,整个函数就结束了,并返回统计出来的1的个数的奇偶性。
需要注意的是这段代码中有一个未使用的if语句,它可能是程序员之前添加的,但是最终没有使用,导致程序不能正常工作,应该删除。
哪里不理解
不知道这样写,你能否理解