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是怎么写的?
惭愧
{
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是怎么写的?
惭愧
不過需注意的是這里的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
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))
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
发生溢出错误。
不知道哪里写的是否有问题。请各位指教
按道理这样转换语法是没问题的。而且所以的类型我也已经设成long了。结果还是溢出。。哭啊...