vb_crc.txt

来自「计算程序。可以通过它来进行CRC的校验计算。可以将十六进制数转化为十进制数据」· 文本 代码 · 共 47 行

TXT
47
字号
Private Sub Command1_Click()
      Dim CRC() As Byte
      Dim d() As Byte '待传输数据
      ReDim d(6) As Byte
      d(0) = &H5
      d(1) = &H3
      d(2) = &H7
      d(3) = &H0
      d(4) = &H0
      d(5) = &H39
      CRC = CRC16(d) '调用CRC16计算函数
      'CRC(0)为高位
      'CRC(1)为低位
    End Sub
    '注意:在数据传输时CRC的低位可能在前,而高位在后。

    Function CRC16(data() As Byte) As String
      Dim CRC16Lo As Byte, CRC16Hi As Byte      'CRC寄存器
      Dim CL As Byte, CH As Byte                '多项式码&HA001
      Dim SaveHi As Byte, SaveLo As Byte
      Dim i As Integer
      Dim Flag As Integer
      CRC16Lo = &HFF
      CRC16Hi = &HFF
      CL = &H1
      CH = &HA0
      For i = 0 To 5
        CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或
        For Flag = 0 To 7
          SaveHi = CRC16Hi
          SaveLo = CRC16Lo
          CRC16Hi = CRC16Hi \ 2            '高位右移一位
          CRC16Lo = CRC16Lo \ 2            '低位右移一位
          If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1
            CRC16Lo = CRC16Lo Or &H80      '则低位字节右移后前面补1
          End If                           '否则自动补0
          If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或
            CRC16Hi = CRC16Hi Xor CH
            CRC16Lo = CRC16Lo Xor CL
          End If
        Next Flag
      Next i
      Dim ReturnData(1) As Byte
      ReturnData(1) = CRC16Lo              'CRC低位(前一位)
      ReturnData(0) = CRC16Hi              'CRC高位(后一位)
      CRC16 = ReturnData
    End Function

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?