VS2005, c#, CRC8 mit x^8+x^4+x^3+x^2+1

Reticent

Erfahrenes Mitglied
Hallo,


ich hoffe hier bin ich richtig.

Ich brauche die CRC8 zu berechnen. Die Funktion, welche ich benutze sieht so aus:
Code:
        byte crc8(byte[] buffer, int len)
        {
            byte crc, i, j;
            crc = 0;
            for (j = 0; j < len; j++)
            {
                for (i = 0x01; i != 0; i <<= 1)
                {
                    if (((crc & 0x01) ^ (buffer[j] & i)) == 1)
                    {
                        crc ^= 0x18;
                        crc >>= 1;
                        crc |= 0x80;
                    }
                    else
                        crc = (byte)(crc >> 1);
                }
            }
            return crc;
        }
Ich brauche sie aber für X^8+X^4+X^3+x^2+1 Polynom. Startwert = 0xE3.
Wie soll ich das ändern
Kenn sich jemand aus? Kann mir jemand helfen?

Dankeee
 
Zuletzt bearbeitet:
so, jetzt habe ich noch eine andere Funktion, welche auch das CRC8 ausrechnen soll. Hier bekomme ich auch anderes Ergebnis!! :(

das sind die Daten
01011330000000000032825147D766
als CRC8 soll 70 rauskommen

wenn ich nun folgende Funktion benutze, bekomme ich das nicht.
Code:
        public static int crc8(int iStart, int iPost, int iPoly, byte[] abData)
        {
            int iEnd = abData.Length;
            int iCRC = iStart;

            for (int i = 0; i < iEnd; i++)
            {
                byte bData = abData[i];
                iCRC ^= bData;
                // System.out.println(" " + i + " -> " + Debug.toBin(bData)); 
                for (int j = 7; j >= 0; j--)
                {
                    if ((iCRC & 0x80) != 0)
                    {
                        iCRC <<= 1;
                        iCRC ^= iPoly;
                        // System.out.println(" ^= " + Debug.toBin((byte)iCRC)); 
                    }
                    else
                    {
                        iCRC <<= 1;
                        // System.out.println(" <= " + Debug.toBin((byte)iCRC)); 
                    }
                }
            }

            iCRC ^= iPost;
            return iCRC & 0xff;
        }
So rufe ich sie auf... (0x1D ist das Polynom und 0xE3 der Startwert)
Code:
byte[] bb = mcu.ConvertHexStringToByteArray("01011330000000000032825147D766");
int iCRC8 = crc8(0xE3, 0x0, 0x1D, bb);

was mache ich hier falsch?
 
gibt es denn gar keine Möglichkeit herauszufinden wie die 0x70 zustande kommt? :confused:

Irgend ein backwards algorithm?

Gibts jemand, der sich damit auskennt?
 
Zurück