I have to connect to device based on 8 bit AVR Atmel uP, and using CRC8 algorithm in comunication protocol. The Function to calculater CRC8 written in VB.Net is working well but i can't translate it to B4A - I will appreciate any help...
B4X:
Function Docrc8(s As String) As Byte
Dim j As Byte
Dim k As Byte
Dim crc8 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
and my code in B4A - it is not working im getting wrong CRC with "-" sign
B4X:
Sub docrc8(s As String) As Byte
Dim j As Byte
Dim k As Byte
Dim crc8 As Byte = 0
Dim m As Byte
Dim x As Int
For m = 1 To sf.Len(s)
x = Asc(sf.Mid(s, m, 1))
For k = 0 To 7
j = Bit.AND(1, Bit.Xor(x, crc8))
crc8 = Bit.AND(NumberFormat2((crc8/2),2,0,0,False),0xFF)
x = Bit.AND(NumberFormat2((x/2),2,0,0,False),0xFF)
If j <> 0 Then
crc8 = Bit.Xor(crc8 ,0x8C)
End If
Next
Next
Return crc8
End Sub
:16700910000000000000000 and CRC8 14
:34800950000000000000000 and CRC8 3
:64900950000000000000000 and CRC8 1
:05900910000000000000000 and CRC8 109
:83000950000000000000000 and CRC8 137
:95500950000000000000000 and CRC8 43
:00900910000000000000000 and CRC8 148
:85101010800000000000000 and CRC8 98
:79601010810000000000000 and CRC8 121
:95601010820000000000000 and CRC8 12
:47601010830000000000000 and CRC8 11
:71600920800000000000000 and CRC8 120
:98400920810000000000000 and CRC8 97
Sub DoCrc8 (s As String) As Byte
Dim j, k, crc8 As Int
Dim x As Int
Dim fix As Int
For m = 0 To s.Length - 1
x = Asc(s.CharAt(m))
For k = 0 To 7
j = Bit.AND(1, Bit.Xor(x, crc8))
fix = crc8 / 2
crc8 = Bit.AND(fix, 0xff)
fix = x / 2
x = Bit.AND(fix, 0xff)
If j <> 0 Then
crc8 = Bit.Xor(crc8, 0x8c)
End If
Next
Next
Return crc8
End Sub
Basic4android (and Java) byte type is signed. Which means that -100 is equivalent to 156. Change the return type to Int instead of Byte if you want an unsigned value.
Sub DoCrc8 (s As String) As Int
Dim j, k, crc8 As Int
Dim x As Int
Dim fix As Int
For m = 0 To s.Length - 1
x = Asc(s.CharAt(m))
For k = 0 To 7
j = Bit.AND(1, Bit.Xor(x, crc8))
fix = crc8 / 2
crc8 = Bit.AND(fix, 0xff)
fix = x / 2
x = Bit.AND(fix, 0xff)
If j <> 0 Then
crc8 = Bit.Xor(crc8, 0x8c)
End If
Next
Next
Return crc8
End Sub
no changes.....
EDIT**************
Everything is ok now i had to change to Int type one variable more....