Red de conocimiento informático - Problemas con los teléfonos móviles - Cálculo del dígito de control VB CRC

Cálculo del dígito de control VB CRC

Función privada CRC16(datos() como byte) como cadena

Dim CRC16Lo como byte, CRC16Hi como byte 'registro CRC

Dim CL como byte, CH como byte 'Código polinomial&

Dim CRCLo como cadena, CRCHi como cadena

Dim SaveHi como byte, SaveLo como byte

Dim i como entero

Dim Flag Como entero

CRC16Lo = &HFF

CRC16Hi = &HFF

CL = &H1

CH = &HA0

For i = 0 To UBound(data)

CRC16Lo = CRC16Lo Xor data (i) 'Xor cada dato con el registro CRC

For Flag = 0 To 7

SaveHi = CRC16Hi

SaveLo = CRC16Lo

CRC16Hi = CRC16Hi \ 2 'Mueve el bit alto un bit hacia la derecha

CRC16Lo = CRC16Lo \ 2 'Desplaza el bit bajo un bit hacia la derecha

If ((SaveHi And & H1) = &H1) Then 'Si el último bit del byte alto es 1

CRC16Lo = CRC16Lo Or &H80 ' De lo contrario, el byte bajo se desplaza un bit a la derecha

End If 'De lo contrario, es automáticamente 0

If ((SaveLo And &H1) = &H1 ) Luego 'Si el LSB es 1, utilice el código polinómico diferenciado

CRC16Hi = CRC16Hi Xor CH

CRC16Lo = CRC16Lo Xor CL

End If

Siguiente bandera

Siguiente i

Si Len(Hex(CRC16Hi)) = 1, entonces

CRCHi = "0" + Hex(CRC16Hi) )

De lo contrario

CRCHi = Hex(CRC16Hi)

Fin si

Si Len(Hex(CRC16Lo)) = 1 entonces

CRCLo = "0" + Hex(CRC16Lo)

De lo contrario

CRCLo = Hex(CRC16Lo)

Finalizar si

CRC16 = CRCLo + CRCHi

Finalizar función