PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CRC von Bascom in vb.net



Che Guevara
01.01.2012, 18:55
Hallo,

für mein derzeitiges Teilprojekt benötige ich unter vb.net eine CRC8-Implementierung. In der Bascom-Hilfe steht folgendes:


The code below shows a VB function of CRC8


Function Docrc8(ByVal s As String) As Byte
Dim j As Byte
Dim k As Byte
Dim crc8 As Byte
Dim m As Byte
Dim x As Byte
crc8 = 0
For m = 1 To Len(s)
x = Asc(Mid(s, m, 1))
For k = 0 To 7
j = 1 And (x Xor crc8)
crc8 = Fix(crc8 / 2) And &HFF
x = Fix(x / 2) And &HFF
If j <> 0 Then
crc8 = crc8 Xor &H8C
End If
Next k
Next
Docrc8 = crc8
End Function

Ich möchte einfach ein Bytearray überprüfen. Jedoch weiß ich nicht, wie und auf welche Weise ich das Array in einen String umwandeln muss? Habs so probiert:


Dim _input(9) As Byte
Dim Crc_string As String
...
Crc_string = Str(_input(1))
For I As Byte = 2 To 8
Crc_string = Crc_string + Str(_input(i))
Next
Crc8 = Docrc8(crc_string)

Jedoch kommt dann bei Bascom was anderes raus als bei vb.net... Könnte mir jemand helfen?

Vielen Dank & Gruß
Chris

MagicWSmoke
02.01.2012, 08:26
Warum so kompliziert ?
An dieser Stelle der CRC8:

For m = 1 To Len(s)
x = Asc(Mid(s, m, 1))
wird aus dem String ein einzelnes Zeichen geholt und in ein Byte umgewandelt. Bei einem Bytearry dagegen holt man sich einfach das Byte, ohne irgendwelche Dinge konvertieren zu müssen, also brauchst Du nur noch zu schreiben:

For m = 1 To 9
x = _input(m)
' ...
Würde mir auch Variablennamen beginnend mit Unterstrich verkneifen, das verwendet der Bascom-Compiler um interne Variablen zu kennzeichnen.

Che Guevara
02.01.2012, 14:11
Hey, danke! Du hast natürlich Recht, die Funktion ist für Strings geschrieben. Habs jetzt ein bisschen abgeändert und so funktionierts. Danke nochmal :)