Linux C——常用検査方法


1.パリティ
パリティはコード伝送の正確性を検証する方法である.検証は、送信されたバイナリコードのセットの数ビットのうち「1」の個数が奇数または偶数であることに基づいて行われる.奇数を用いたものを奇数検査と呼び,逆に偶数検査と呼ぶ.どのような検査を採用するかは事前に規定されている.通常、このコードのセットの「1」の個数を奇数または偶数にするために、パリティビットを特別に設定します.奇数で検証すると、受信側がこのコードのセットを受信すると、「1」の個数が奇数であるか否かを検証し、伝送コードの正確性を決定する.
奇数検査:すべての転送された数ビット(文字を含む各数ビットと検査ビット)のうち、「1」の個数は奇数であり、例えば:
 1 0110,0101 0 0110,0001
偶数検査:すべての転送された数ビット(文字を含む各数ビットと検査ビット)のうち、「1」の個数は偶数で、例えば:
 1 0100,0101 0 0100,0001
パリティ検査は、情報伝送中の部分的な誤りを検出することができる(1ビットの誤りは検出でき、2ビット以上の誤りは検出できない)とともに、誤り訂正はできない.エラーが検出された後、再送を要求するしかありません.しかし、その実現が簡単であるため、広く使用されている.
unsigned int v;       //       
bool parity = false;  //      
while (v)
{
  parity = !parity;
  v = v & (v - 1);
}

whileサイクルにより、実行するたびにvの1の数が1減少し、vの1の数が奇数であればparity=true、そうでなければparity=falseとなる.
 
2.CRC検査
実現方法:これは除算及び残数の原理を利用して誤検出を行う.受信したコード群を除算演算し、除算すれば伝送に誤りがないことを示す.割り切れていない場合は、転送にエラーが発生していることを示します.crcチェックには自動誤り訂正能力もあります.
crc検査には主に計算法とルックアップ法の2つの方法がある.
適用範囲:CRC-12コードは通常6-bit文字列を転送するために使用されます.CRC-16およびCRC-CCITTコードは、転送に使用されます.
8-bit文字です.CRC-32:ハードディスクデータ、ネットワーク転送など
unsigned int cal_crc(unsigned char *ptr, unsigned char len)
{
    unsigned char i;
    unsigned int crc=0;
while(len--!=0)
 {
        for(i=0x80; i!=0; i/=2)
        {
            if((crc&0x8000)!=0)
            {
                crc*=2;
                crc^=0x1021;
            } /*   CRC  2  CRC */
            else
            {
                crc*=2;
            }
            if((*ptr&i)!=0)
            {
                crc^=0x1021;
            }/*       CRC */
        }
        ptr++;
    }
    return(crc);
}

3.チェックサム
チェックサムは、データ処理およびデータ通信の分野において、宛先のデータ項目のセットの和をチェックするために使用される.通常は16進数で表される形式です.チェックサムの値が16進数のFFを超えると、255となる.チェックサムとしてその補符号が要求される.通常、通信、特に遠隔通信においてデータの完全性と正確性を保証するために使用される.
unsigned char Check(unsigned char *buf, int len)  
{  
    int iSum = 0;  
    int iTemp = 0;  
    CString str;  
    for (int i = 0;i < len;i++)  
    {  
        iSum += buf[i];  
    }  
    iSum %= 0x100;  
return (unsigned char)iSum;
}

4.異種検査
それはすべてのデータを指定された初期値(通常は0)と1回異ならせ、最後の結果は検証値であり、通常は通信データの最後に添付して送信する.受信者がデータを受信した後、自身も1回の異和和検査値を計算し、受信した検査値と一致すれば、受信したデータが完全であることを示す.
unsigned char CheckXor(char *strData,int len)  
{  
    char checksum = 0;  
    for (int i = 0;i < len;i++)  
    {  
        checksum = checksum ^ strData[i];  
    }  
    return (unsigned char)checksum;  
}  

5.ハミング検査
Richard Hammingによって1950年に提案され、現在も広く採用されている有効な検査方法は、少数の検査ビットを増やすだけで、2ビットの同時エラーを検出することができ、1ビットのエラーを検出することができ、この誤りビットの正確な値を自動的に回復することができる有効なハンドセグメントであり、後者は自動誤り訂正と呼ばれている.その実現原理は、k個のデータビットにr個の検証ビットを加えて、k+rビットの新しいコードワードを形成し、新しいコードワードの符号距離を比較的均一に大きくすることである.データの各バイナリビットをいくつかの異なる偶数ビットの組合せに割り当てると、あるビットがエラーを起こすと、関連するいくつかのビットの値が変化し、エラーを発見するだけでなく、どのビットがエラーを指摘するかを指摘することができ、さらに自動誤り訂正のために根拠を提供した.