Hallo,
ich habe ein Array von bytes, welche ich an einen STM32f1 schicke und ich möchte gerne die Kommunikation mit einer CRC32 absichern. der STM32F1 kann automatisch eine CRC mit dem Generatorpolynom 0x4C11DB7 berechnen. zum testen hab ich nur ein byte (0x78) gewählt und ich erhalte 0x01B82D24 als CRC. nun müsste mein PC program auf die gleiche CRC kommen, tut sie aber nicht. in dem Programm habe ich eine Klasse aus dem internet. der code sieht wie folgt aus:
kann mir jemand helfen?
ich habe ein Array von bytes, welche ich an einen STM32f1 schicke und ich möchte gerne die Kommunikation mit einer CRC32 absichern. der STM32F1 kann automatisch eine CRC mit dem Generatorpolynom 0x4C11DB7 berechnen. zum testen hab ich nur ein byte (0x78) gewählt und ich erhalte 0x01B82D24 als CRC. nun müsste mein PC program auf die gleiche CRC kommen, tut sie aber nicht. in dem Programm habe ich eine Klasse aus dem internet. der code sieht wie folgt aus:
Quellcode
- Public Class CRC32
- Private Shadows CRC32Table() As Integer
- Public Sub New()
- Dim _CRC32Table(256) As Integer
- Dim DWPolynomial As Integer = &H4C11DB7 '&HEDB88320
- Dim DWCRC As Integer
- For i = 0 To 255
- DWCRC = i
- For j = 8 To 1 Step -1
- If (DWCRC And 1) Then
- DWCRC = ((DWCRC And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
- DWCRC = DWCRC Xor DWPolynomial
- Else
- DWCRC = ((DWCRC And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
- End If
- Next j
- _CRC32Table(i) = DWCRC
- Next i
- CRC32Table = _CRC32Table
- End Sub
- Public Function GetCRC32(ByVal Data() As Byte, ByVal BlockLength As Integer) As Integer
- Try
- Dim CRC32Result As Integer = &HFFFFFFFF
- Dim ReadSize As Integer = BlockLength
- Dim Count As Integer = 0
- Dim DataBuffer(BlockLength - 1) As Byte
- If Data.Length < ReadSize Then
- Count = Data.Length
- Else
- Count = ReadSize
- End If
- Buffer.BlockCopy(Data, 0, DataBuffer, 0, Count)
- Dim c As Integer = 1
- Dim i As Integer, n As Integer
- Do While (Count > 0)
- For i = 0 To Count - 1
- n = (CRC32Result And &HFF) Xor DataBuffer(i)
- CRC32Result = ((CRC32Result And &HFFFFFF00) \ &H100) And &HFFFFFF
- CRC32Result = CRC32Result Xor CRC32Table(n)
- Next i
- Dim offset As UInt32 = c * ReadSize
- If ReadSize <> BlockLength Or Data.Length < BlockLength Then
- Count = 0
- Else
- If (offset + ReadSize) > Data.Length Then
- ReadSize = Data.Length - offset
- End If
- Buffer.BlockCopy(Data, offset, DataBuffer, 0, ReadSize)
- Count = ReadSize
- End If
- c += 1
- Loop
- ' Return Hex(Not (CRC32Result)) 'gibt checksumme als hexcode zurück
- Return CRC32Result
- Catch ex As Exception
- Return Nothing
- End Try
- End Function
- End Class
kann mir jemand helfen?