code const word CRC_TAB[16] = 

     0x0000,  0x1021,  0x2042, 0x3063,  0x4084,  0x50a5,  0x60c6,  0x70e7,
     0x8108,  0x9129,  0xa14a, 0xb16b,  0xc18c,  0xd1ad,  0xe1ce,  0xf1ef,
     };unsigned int get_crc(unsigned char *str)
{
unsigned char i = 0;
unsigned int crc = 0;
while(i<14)
{
crc = (crc <<8) ^ CRC_TAB[(crc >>8) ^ (*(str++))];
i++;
}
}
以上这段C代码,转成VB是怎么写的?
惭愧

解决方案 »

  1.   

    基本轉換:
    不過需注意的是這里的c語言的無符號類型
    ---------------------------Dim CRC_TAB(15) As IntegerPrivate Function get_crc(ByRef sstr() As Byte) As Long   CRC_TAB(0) = &H0&
       CRC_TAB(1) = &H1021&
       CRC_TAB(2) = &H2042&
       CRC_TAB(3) = &H3063&
       CRC_TAB(4) = &H4084&
       CRC_TAB(5) = &H50A5&
       CRC_TAB(6) = &H60C6&
       CRC_TAB(7) = &H70E7&
       CRC_TAB(8) = &H8108&
       CRC_TAB(9) = &H9129&
       CRC_TAB(10) = &HA14A&
       CRC_TAB(11) = &HB16B&
       CRC_TAB(12) = &HC18C&
       CRC_TAB(13) = &HD1AD&
       CRC_TAB(14) = &HE1CE&
       CRC_TAB(15) = &HF1EF&
            
       Dim i As Byte
       Dim crc As Long
       Dim pStr As Integer
       pStr = 0   While (i < 14)
          crc = (crc * (2 ^ 8)) Xor CRC_TAB((crc \ (2 ^ 8)) Xor (sstr(pStr)))
          pStr = pStr + 1
          i = i + 1
       Wend
       get_crc = crc
       
    End Function
      

  2.   

    CRC_TAB定义成INTEGER
    unsigned int get_crc(unsigned char *str)的参数要用BYTE型数组
    char i 定义为BYTE
    unsigned int crc = 0定义为INTEGERcrc = (crc <<8) ^ CRC_TAB[(crc >>8) ^ (*(str++))];变成crc=(crc*256) XOR CRC_TAB((crc\256) xor str(i))
      

  3.   

    '定义校验数组
    Public CRC_TAB(256) As IntegerPublic Sub InitCRC()
      CRC_TAB(0) = &H0&
      CRC_TAB(1) = &H1021&
      CRC_TAB(2) = &H2042&
      CRC_TAB(3) = &H3063&
      CRC_TAB(4) = &H4084&
      CRC_TAB(5) = &H50A5&
      CRC_TAB(6) = &H60C6&
      CRC_TAB(7) = &H70E7&
      
      CRC_TAB(8) = &H8108&
      CRC_TAB(9) = &H9129&
      CRC_TAB(10) = &HA14A&
      CRC_TAB(11) = &HB16B&
      CRC_TAB(12) = &HC18C&
      CRC_TAB(13) = &HD1AD&
      CRC_TAB(14) = &HE1CE&
      CRC_TAB(15) = &HF1EF&
      
      CRC_TAB(16) = &H1231&
      CRC_TAB(17) = &H210&
      CRC_TAB(18) = &H3273&
      CRC_TAB(19) = &H2252&
      CRC_TAB(20) = &H52B5&
      CRC_TAB(21) = &H4294&
      CRC_TAB(22) = &H72F7&
      CRC_TAB(23) = &H62D6&
      
      CRC_TAB(24) = &H9339&
      CRC_TAB(25) = &H8318&
      CRC_TAB(26) = &HB37B&
      CRC_TAB(27) = &HA35A&
      CRC_TAB(28) = &HD3BD&
      CRC_TAB(29) = &HC39C&
      CRC_TAB(30) = &HF3FF&
      CRC_TAB(31) = &HE3DE&
      
      CRC_TAB(32) = &H2462&
      CRC_TAB(33) = &H3443&
      CRC_TAB(34) = &H420&
      CRC_TAB(35) = &H1401&
      CRC_TAB(36) = &H64E6&
      CRC_TAB(37) = &H74C7&
      CRC_TAB(38) = &H44A4&
      CRC_TAB(39) = &H5485&
      
      CRC_TAB(40) = &HA56A&
      CRC_TAB(41) = &HB54B&
      CRC_TAB(42) = &H8528&
      CRC_TAB(43) = &H9509&
      CRC_TAB(44) = &HE5EE&
      CRC_TAB(45) = &HF5CF&
      CRC_TAB(46) = &HC5AC&
      CRC_TAB(47) = &HD58D&
      
      CRC_TAB(48) = &H3653&
      CRC_TAB(49) = &H2672&
      CRC_TAB(50) = &H1611&
      CRC_TAB(51) = &H630&
      CRC_TAB(52) = &H76D7&
      CRC_TAB(53) = &H66F6&
      CRC_TAB(54) = &H5695&
      CRC_TAB(55) = &H46B4&
      
      CRC_TAB(56) = &HB75B&
      CRC_TAB(57) = &HA77A&
      CRC_TAB(58) = &H9719&
      CRC_TAB(59) = &H8738&
      CRC_TAB(60) = &HF7DF&
      CRC_TAB(61) = &HE7FE&
      CRC_TAB(62) = &HD79D&
      CRC_TAB(63) = &HC7BC&
      
      CRC_TAB(64) = &H48C4&
      CRC_TAB(65) = &H58E5&
      CRC_TAB(66) = &H6886&
      CRC_TAB(67) = &H78A7&
      CRC_TAB(68) = &H840&
      CRC_TAB(69) = &H1861&
      CRC_TAB(70) = &H2802&
      CRC_TAB(71) = &H3823&
      
      CRC_TAB(72) = &HC9CC&
      CRC_TAB(73) = &HD9ED&
      CRC_TAB(74) = &HE98E&
      CRC_TAB(75) = &HF9AF&
      CRC_TAB(76) = &H8948&
      CRC_TAB(77) = &H9969&
      CRC_TAB(78) = &HA90A&
      CRC_TAB(79) = &HB92B&
        
      CRC_TAB(80) = &H5AF5&
      CRC_TAB(81) = &H4AD4&
      CRC_TAB(82) = &H7AB7&
      CRC_TAB(83) = &H6A96&
      CRC_TAB(84) = &H1A71&
      CRC_TAB(85) = &HA50&
      CRC_TAB(86) = &H3A33&
      CRC_TAB(87) = &H2A12&
      
      CRC_TAB(88) = &HDBFD&
      CRC_TAB(89) = &HCBDC&
      CRC_TAB(90) = &HFBBF&
      CRC_TAB(91) = &HEB9E&
      CRC_TAB(92) = &H9B79&
      CRC_TAB(93) = &H8B58&
      CRC_TAB(94) = &HBB3B&
      CRC_TAB(95) = &HAB1A&
      
      CRC_TAB(96) = &H6CA6&
      CRC_TAB(97) = &H7C87&
      CRC_TAB(98) = &H4CE4&
      CRC_TAB(99) = &H5CC5&
      CRC_TAB(100) = &H2C22&
      CRC_TAB(101) = &H3C03&
      CRC_TAB(102) = &HC60&
      CRC_TAB(103) = &H1C41&
      
      CRC_TAB(104) = &HEDAE&
      CRC_TAB(105) = &HFD8F&
      CRC_TAB(106) = &HCDEC&
      CRC_TAB(107) = &HDDCD&
      CRC_TAB(108) = &HAD2A&
      CRC_TAB(109) = &HBD0B&
      CRC_TAB(110) = &H8D68&
      CRC_TAB(111) = &H9D49&
      
      CRC_TAB(112) = &H7E97&
      CRC_TAB(113) = &H6EB6&
      CRC_TAB(114) = &H5ED5&
      CRC_TAB(115) = &H4EF4&
      CRC_TAB(116) = &H3E13&
      CRC_TAB(117) = &H2E32&
      CRC_TAB(118) = &H1E51&
      CRC_TAB(119) = &HE70&
      
      CRC_TAB(120) = &HFF9F&
      CRC_TAB(121) = &HEFBE&
      CRC_TAB(122) = &HDFDD&
      CRC_TAB(123) = &HCFFC&
      CRC_TAB(124) = &HBF1B&
      CRC_TAB(125) = &HAF3A&
      CRC_TAB(126) = &H9F59&
      CRC_TAB(127) = &H8F78&
      
      CRC_TAB(128) = &H9188&
      CRC_TAB(129) = &H81A9&
      CRC_TAB(130) = &HB1CA&
      CRC_TAB(131) = &HA1EB&
      CRC_TAB(132) = &HD10C&
      CRC_TAB(133) = &HC12D&
      CRC_TAB(134) = &HF14E&
      CRC_TAB(135) = &HE16F&
      
      CRC_TAB(136) = &H1080&
      CRC_TAB(137) = &HA1&
      CRC_TAB(138) = &H30C2&
      CRC_TAB(139) = &H20E3&
      CRC_TAB(140) = &H5004&
      CRC_TAB(141) = &H4025&
      CRC_TAB(142) = &H7046&
      CRC_TAB(143) = &H6067&
      
      CRC_TAB(144) = &H83B9&
      CRC_TAB(145) = &H9398&
      CRC_TAB(146) = &HA3FB&
      CRC_TAB(147) = &HB3DA&
      CRC_TAB(148) = &HC33D&
      CRC_TAB(149) = &HD31C&
      CRC_TAB(150) = &HE37F&
      CRC_TAB(151) = &HF35E&
      
      CRC_TAB(152) = &H2B1&
      CRC_TAB(153) = &H1290&
      CRC_TAB(154) = &H22F3&
      CRC_TAB(155) = &H32D2&
      CRC_TAB(156) = &H4235&
      CRC_TAB(157) = &H5214&
      CRC_TAB(158) = &H6277&
      CRC_TAB(159) = &H7256&
      
      CRC_TAB(160) = &HB5EA&
      CRC_TAB(161) = &HA5CB&
      CRC_TAB(162) = &H95A8&
      CRC_TAB(163) = &H8589&
      CRC_TAB(164) = &HF56E&
      CRC_TAB(165) = &HE54F&
      CRC_TAB(166) = &HD52C&
      CRC_TAB(167) = &HC50D&
      
      CRC_TAB(168) = &H34E2&
      CRC_TAB(169) = &H24C3&
      CRC_TAB(170) = &H14A0&
      CRC_TAB(171) = &H481&
      CRC_TAB(172) = &H7466&
      CRC_TAB(173) = &H6447&
      CRC_TAB(174) = &H5424&
      CRC_TAB(175) = &H4405&
      
      CRC_TAB(176) = &HA7DB&
      CRC_TAB(177) = &HB7FA&
      CRC_TAB(178) = &H8799&
      CRC_TAB(179) = &H97B8&
      CRC_TAB(180) = &HE75F&
      CRC_TAB(181) = &HF77E&
      CRC_TAB(182) = &HC71D&
      CRC_TAB(183) = &HD73C&
      
      CRC_TAB(184) = &H26D3&
      CRC_TAB(185) = &H36F2&
      CRC_TAB(186) = &H691&
      CRC_TAB(187) = &H16B0&
      CRC_TAB(188) = &H6657&
      CRC_TAB(189) = &H7676&
      CRC_TAB(190) = &H4615&
      CRC_TAB(191) = &H5634&
      
      CRC_TAB(192) = &HD94C&
      CRC_TAB(193) = &HC96D&
      CRC_TAB(194) = &HF90E&
      CRC_TAB(195) = &HE92F&
      CRC_TAB(196) = &H99C8&
      CRC_TAB(197) = &H89E9&
      CRC_TAB(198) = &HB98A&
      CRC_TAB(199) = &HA9AB&
      
      CRC_TAB(200) = &H5844&
      CRC_TAB(201) = &H4865&
      CRC_TAB(202) = &H7806&
      CRC_TAB(203) = &H6827&
      CRC_TAB(204) = &H18C0&
      CRC_TAB(205) = &H8E1&
      CRC_TAB(206) = &H3882&
      CRC_TAB(207) = &H28A3&
      
      CRC_TAB(208) = &HCB7D&
      CRC_TAB(209) = &HDB5C&
      CRC_TAB(210) = &HEB3F&
      CRC_TAB(211) = &HFB1E&
      CRC_TAB(212) = &H8BF9&
      CRC_TAB(213) = &H9BD8&
      CRC_TAB(214) = &HABBB&
      CRC_TAB(215) = &HBB9A&
      
      CRC_TAB(216) = &H4A75&
      CRC_TAB(217) = &H5A54&
      CRC_TAB(218) = &H6A37&
      CRC_TAB(219) = &H7A16&
      CRC_TAB(220) = &HAF1&
      CRC_TAB(221) = &H1AD0&
      CRC_TAB(222) = &H2AB3&
      CRC_TAB(223) = &H3A92&
      
      CRC_TAB(224) = &HFD2E&
      CRC_TAB(225) = &HED0F&
      CRC_TAB(226) = &HDD6C&
      CRC_TAB(227) = &HCD4D&
      CRC_TAB(228) = &HBDAA&
      CRC_TAB(229) = &HAD8B&
      CRC_TAB(230) = &H9DE8&
      CRC_TAB(231) = &H8DC9&
      
      CRC_TAB(232) = &H7C26&
      CRC_TAB(233) = &H6C07&
      CRC_TAB(234) = &H5C64&
      CRC_TAB(235) = &H4C45&
      CRC_TAB(236) = &H3CA2&
      CRC_TAB(237) = &H2C83&
      CRC_TAB(238) = &H1CE0&
      CRC_TAB(239) = &HCC1&
      
      CRC_TAB(240) = &HEF1F&
      CRC_TAB(241) = &HFF3E&
      CRC_TAB(242) = &HCF5D&
      CRC_TAB(243) = &HDF7C&
      CRC_TAB(244) = &HAF9B&
      CRC_TAB(245) = &HBFBA&
      CRC_TAB(246) = &H8FD9&
      CRC_TAB(247) = &H9FF8&
      
      CRC_TAB(248) = &H6E17&
      CRC_TAB(249) = &H7E36&
      CRC_TAB(250) = &H4E55&
      CRC_TAB(251) = &H5E74&
      CRC_TAB(252) = &H2E93&
      CRC_TAB(253) = &H3EB2&
      CRC_TAB(254) = &HED1&
      CRC_TAB(255) = &H1EF0&
      
    End Sub
    Public Function get_crc(ByRef Str() As Byte) As Integer
       Dim i As Byte
       Dim crc As Long
       While (i < 14)
          crc = (crc * 256) Xor CRC_TAB((crc \ 256) Xor Str(i))
          i = i + 1
       Wend
       get_crc = crc
       
    End Function
    ---------------------------------------------------------------------------
    private sub Test()
      Dim b(14) As Byte
      For i = 0 To 13
        b(i) = Hex(Asc(i))
      Next    
      MsgBox get_crc(b)
    end sub 
    发生溢出错误。
    不知道哪里写的是否有问题。请各位指教
      

  4.   

    没试过,但感觉crc * 256有问题
      

  5.   

    现在就是没搞清除问题出在哪
    按道理这样转换语法是没问题的。而且所以的类型我也已经设成long了。结果还是溢出。。哭啊...