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