{  
   int i;    unsigned short reg_crc=0xffff;
   while(length--) 
   {
        reg_crc=(reg_crc>>8) & 0x00ff;
     reg_crc^= * data++;
      for(i=0;i<8;i++) 
       { 
         if(reg_crc & 0x01) 
           { reg_crc=(reg_crc>>1)^0xa001; }
         else 
           { reg_crc=reg_crc>>1; }
       }
   }
    return reg_crc;
}

解决方案 »

  1.   

    dim i as longdim reg_crc as integer
    reg_crc = &Hffff
    while length <> 0 
        length = length - 1
            reg_crc=(reg_crc \ 256) and &Hff
         reg_crc=reg_crc xor 数组(data)
        data = data + 1
          for i=0 to 8 
             if reg_crc and 1 <> 0 then 
                 reg_crc=(reg_crc \ 2) xor &Ha001
             else 
                 reg_crc=reg_crc \ 2
           next
       wend
    函数名 =  reg_crc
      

  2.   

    谢谢帮我翻写,可是最终结果是 -1,麻烦您在帮我看一下
    Function CRC16(data() As Byte) As String
    Dim i As Long
    Dim M As Integer
    Dim reg_crc As Integer
    reg_crc = &HFFFFWhile length <> 0    length = length - 1
            reg_crc = (reg_crc \ 256) And &HFF
            reg_crc = reg_crc Xor data(M)
        M = M + 1
    '    MsgBox M
             For i = 0 To 8
                If reg_crc And 1 <> 0 Then
                    reg_crc = (reg_crc \ 2) Xor &HA001
                Else
                    reg_crc = reg_crc \ 2
                    End If
              Next i
       Wend
       CRC16 = reg_crc
    End Function
    ‘===================================================================
    Private Sub Command5_Click()
    Dim CRC() As Byte
    Text7.Text = Len(Text1)
    CRC = CRC16(Text1.Text)
    Text9 = CRC
    End Sub
    ‘===================================================================
      

  3.   

    1L大神,我刚刚把修改了下,然后[align=left]计[align=left]算出来的结果和我的C源代码结果不一致比如计算:SAD=28901;##FLAG=12345
    C出来:AB41 
    而我根据你给我的更改的代码出来的是:6AC0麻烦再帮我查找下问题所在,谢谢C##
    {  
       int i;    unsigned short reg_crc=0xffff;
       while(length--) 
       {
            reg_crc=(reg_crc>>8) & 0x00ff;
         reg_crc^= * data++;
          for(i=0;i<8;i++) 
           { 
             if(reg_crc & 0x01) 
               { reg_crc=(reg_crc>>1)^0xa001; }
             else 
               { reg_crc=reg_crc>>1; }
           }
       }
        return reg_crc;                                                                          \\reg_crc;结果为AB41 
    }[/align]\\***********************************************************************************************VB
    Function CRC16(data() As Byte) As String
    Dim i As Long
    Dim M As Integer
    Dim reg_crc As Long
    reg_crc = &HFFFF&
    MsgBox length
    length = Len(Text1)
    While length <> 0    length = length - 1
            reg_crc = (reg_crc \ 256) And &HFF
            reg_crc = reg_crc Xor data(M)
            M = M + 1
             For i = 0 To 7
                If reg_crc And 1 <> 0 Then
                    reg_crc = (reg_crc \ 2) Xor &HA001
                Else
                    reg_crc = reg_crc \ 2
                    End If
              Next i
       Wend
       CRC16 = reg_crc
    End Function
    ’==================================================================
    Private Sub Command5_Click()
    Dim CRC() As Byte
    Text7.Text = Len(Text1)
    CRC = CRC16(Text1.Text)
    Text9 = CRC                                                  ‘CRC结果为6AC0
    End Sub
      

  4.   

    标准的CRC16算法,网上随便找一个也就是了,没必要一定要翻译过来
      

  5.   

    标准CRC16算法有6种,也就是说结果会有6组,而我需要被翻译的是其中的一种,用其他的,CRC结果不匹配
      

  6.   

    这样硬生生的翻译,最终得到的结果肯定会有差异,况且C里有指针,在VB里是没有指针的概念的。