C# CRC8校验和计算不正确

C# CRC8校验和计算不正确,c#,checksum,crc,C#,Checksum,Crc,我让这个类计算一个字节[]的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) {

我让这个类计算一个字节[]的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;
            }
        }
    }
这将导致0xBC

然而,根据: 这是不正确的,因为CheckSum8异或的校验和是0x31


我哪里做错了什么?

在链接站点上,只列出了一些16位和32位CRC CHECKSUM8OR不是CRC。0xBC来自8位CRC
称为“CRC-8/DVB-S2”,请参见

啊,好的,所以我对这个校验和计算有过多的解释

那么,在这种情况下,很容易:

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

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

                checksum ^= data[i];

            }


            return checksum;
        }
公共静态字节检查SUM8xOR(字节[]数据)
{
字节校验和=0x00;
for(int i=0;i
谢谢,如果有人对此感兴趣,我已经发布了我自己的答案。
public static byte Checksum8XOR(byte[] data)
        {
            byte checksum = 0x00;

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

                checksum ^= data[i];

            }


            return checksum;
        }