BYTE data[19];我有19个字节,如何得知他们所有的bit中1的个数是不是奇数呢?应该算手动编写奇校验吧.

解决方案 »

  1.   

    手工对单个字节判断:
    BYTE byteValue = ??;
    bool bIsAzygous = byteValue < 0;
    for(int i = 1; i < 8; i ++)
    {
    byte = byteValue << 1;
    if(byteValue < 0)
    bIsAzygous = !bIsAzygous;
    }
      

  2.   

    byte = byteValue << 1;应为byteValue = byteValue << 1;
      

  3.   

    查表法,构造一个[0..255]的数组,里面事先计算好单个字节的奇偶性,比如// 0表示是偶个数,1表示是奇个数
    ParityArray = {0, 1, 1, 0, 1, 0, 0, 1, 1, ..................., 1, 1, 0};// 返回true代表偶个数,false代表奇个数
    BOOL CheckParity(BYTE data[])
    {
      int nParity = 0;
      for(int i=0; i<sizeof(data); i++)
      {
        nParity += ParityArray[data[i]];
      }
      return ((nParity % 2) == 0);
    }
      

  4.   

    // 0表示是偶个数,1表示是奇个数
    char ParityArray[] = {0, 1, 1, 0, 1, 0, 0, 1, 1, ..................., 1, 1, 0};
      

  5.   

    还是折中点,判断单个字节数里的1个数 unsigned char data = 0x65;
    char res = 0; while(data)
    {
    res += (data&0x01)?1:0;
    data>>=1;
    }