2017-06-26 8 views
1

誤ったCRC8チェックサム: 私はバイト[]のCRC8チェックサムを計算するために、このクラスを得た計算

public static class Crc8 
    { 
     static byte[] table = new byte[256]; 
     // x8 + x7 + x6 + x4 + x2 + 1 
     const byte poly = 0xd5; 

     public static byte ComputeChecksum(params byte[] bytes) 
     { 
      byte crc = 0; 
      if (bytes != null && bytes.Length > 0) 
      { 
       foreach (byte b in bytes) 
       { 
        crc = table[crc^b]; 
       } 
      } 
      return crc; 
     } 

     static Crc8() 
     { 
      for (int i = 0; i < 256; ++i) 
      { 
       int temp = i; 
       for (int j = 0; j < 8; ++j) 
       { 
        if ((temp & 0x80) != 0) 
        { 
         temp = (temp << 1)^poly; 
        } 
        else 
        { 
         temp <<= 1; 
        } 
       } 
       table[i] = (byte)temp; 
      } 
     } 
    } 

メインで

私が得た:

static void Main(string[] args) 
{ 

    string number = "123456789"; 



    Console.WriteLine(Convert.ToByte(Crc8.ComputeChecksum(StringToByteArray(number))).ToString("x2")); 

    Console.ReadLine(); 

} 

private static byte[] StringToByteArray(string str) 
{ 
    ASCIIEncoding enc = new ASCIIEncoding(); 
    return enc.GetBytes(str); 
} 

これは

の0xBCになり

ただし、に従って:http://www.scadacore.com/field-tools/programming-calculators/online-checksum-calculator/ CheckSum8 Xorのチェックサムが0x31であるため、これは間違っています。

私はそこで何が間違っていましたか?

答えて

0

ああを参照してください、 "CRC-8/DVB-S2" と呼ばれる8ビットのCRC から来て、[OK]をので、私は、このチェックサム計算をoveriterpretedました。

まあ、その場合には、それは簡単です:誰かがそれの興味を持っている場合

public static byte Checksum8XOR(byte[] data) 
     { 
      byte checksum = 0x00; 

      for (int i = 0; i < data.Length; i++) 
      { 

       checksum ^= data[i]; 

      } 


      return checksum; 
     } 
関連する問題