Moin,
Ich versuche gerade ein Vb.Net gegenstück zur Bascom CRC8 Checksumme zu
erstellen. Es soll eine CRC8 über 3 Bytes berechnet werden.
In der Bascom Hilfe ist sogar ein VB6 Code angegeben, allerdings
funktioniert meine Übersetzung nach Vb.net nicht richtig.
Hier das MCS Beispiel:
1 | Function Docrc8(s As String) As Byte
|
2 |
|
3 | Dim j As Byte
|
4 | Dim k As Byte
|
5 | Dim crc8 As Byte
|
6 | crc8 = 0
|
7 |
|
8 | For m = 1 To Len(s)
|
9 | x = Asc(Mid(s, m, 1))
|
10 | For k = 0 To 7
|
11 | j = 1 And (x Xor crc8)
|
12 | crc8 = Fix(crc8 / 2) And &HFF
|
13 | x = Fix(x / 2) And &HFF
|
14 | If j <> 0 Then
|
15 | crc8 = crc8 Xor &H8C
|
16 | End If
|
17 | Next k
|
18 | Next
|
19 | Docrc8 = crc8
|
20 | End Function
|
Und hier nun meine Version:
1 | Dim buffer(3) as byte
|
2 |
|
3 | Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
|
4 |
|
5 | buffer(0) = 1
|
6 | buffer(1) = 2
|
7 | buffer(2) = 3
|
8 |
|
9 | Dim j As Byte
|
10 | Dim crc8 As Byte = 0
|
11 | For m As Integer = 0 To (buffer.Length - 1)
|
12 | Dim x As Byte = buffer(m)
|
13 |
|
14 | For k As Integer = 0 To 7
|
15 | j = CByte(1 And (x Xor crc8))
|
16 | crc8 = CByte((crc8 / 2) And &HFF)
|
17 | x = CByte((x / 2) And &HFF)
|
18 | If j <> 0 Then
|
19 | crc8 = CByte(crc8 Xor &H8C)
|
20 | End If
|
21 | Next
|
22 | Next
|
23 |
|
24 | TextBox4.Text = Str(crc8)
|
25 | End Sub
|
Für das Array {1, 2, 3} gibt Bascom mir die Checksumme "216" aus,
.Net sagt "0", für {2, 3, 4} .Net "71", Bascom "123"...
Ich komme leider nicht darauf, was da falsch läuft. Hat jemand eine
Idee?
Vielen Dank!