📄 crc16程序--blove的笔记.htm
字号:
0x40<BR>};<BR><BR>const BYTE chCRCLTalbe[]
=
// CRC 低位字节值表<BR>{<BR>0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03,
0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,<BR>0x05, 0xC5, 0xC4, 0x04,
0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E,<BR>0x0A, 0xCA,
0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19,
0xD9,<BR>0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
0x1D, 0x1C, 0xDC,<BR>0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16,
0xD6, 0xD2, 0x12, 0x13, 0xD3,<BR>0x11, 0xD1, 0xD0, 0x10, 0xF0,
0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,<BR>0x36, 0xF6, 0xF7,
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D,<BR>0xFF,
0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8,
0x38,<BR>0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
0x2E, 0x2F, 0xEF,<BR>0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25,
0xE5, 0x27, 0xE7, 0xE6, 0x26,<BR>0x22, 0xE2, 0xE3, 0x23, 0xE1,
0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,<BR>0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4,<BR>0x6C,
0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B,
0xAB,<BR>0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
0x7B, 0x7A, 0xBA,<BR>0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC,
0x7C, 0xB4, 0x74, 0x75, 0xB5,<BR>0x77, 0xB7, 0xB6, 0x76, 0x72,
0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,<BR>0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,<BR>0x55,
0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E,
0x5E,<BR>0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
0x48, 0x49, 0x89,<BR>0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F,
0x4F, 0x8D, 0x4D, 0x4C, 0x8C,<BR>0x44, 0x84, 0x85, 0x45, 0x87,
0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,<BR>0x41, 0x81, 0x80,
0x40<BR>};<BR><BR><BR>WORD CRC16_1(BYTE* pchMsg, WORD
wDataLen)<BR>{<BR> BYTE chCRCHi =
0xFF; // 高CRC字节初始化<BR> BYTE chCRCLo
= 0xFF; // 低CRC字节初始化<BR> WORD
wIndex; //
CRC循环中的索引<BR><BR> while
(wDataLen--)<BR> {<BR>
// 计算CRC<BR>
wIndex =
chCRCLo ^ *pchMsg++ ;<BR>
chCRCLo = chCRCHi ^ chCRCHTalbe[wIndex];
<BR>
chCRCHi = chCRCLTalbe[wIndex] ;<BR>
} <BR><BR> return ((chCRCHi
<< 8) | chCRCLo) ;<BR>}<BR><BR><BR>//
--------------------------------------------------------------<BR>//
CRC16计算方法2:使用简单的校验表<BR>//
--------------------------------------------------------------<BR>const
WORD wCRCTalbeAbs[] =<BR>{<BR>0x0000, 0xCC01, 0xD801, 0x1400,
0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800,
0xB401, 0x5000, 0x9C01, 0x8801, 0x4400, <BR>};<BR><BR>WORD
CRC16_2(BYTE* pchMsg, WORD wDataLen)<BR>{<BR>
WORD wCRC = 0xFFFF;<BR>
WORD i;<BR> BYTE
chChar;<BR><BR> for (i = 0; i <
wDataLen; i++)<BR> {<BR>
chChar =
*pchMsg++;<BR>
wCRC = wCRCTalbeAbs[(chChar ^ wCRC) & 15] ^ (wCRC
>> 4);<BR>
wCRC = wCRCTalbeAbs[((chChar >> 4) ^ wCRC)
& 15] ^ (wCRC >> 4);<BR>
}<BR><BR> return
wCRC;<BR>}<BR><BR><BR>//
-----------------------------------------------------------------<BR>//
CRC16计算方法3:使用直接结算的方法<BR>//
-----------------------------------------------------------------<BR>WORD
CRC16_3(BYTE* pchMsg, WORD wDataLen)<BR>{<BR>
BYTE i, chChar;<BR>
WORD wCRC = 0xFFFF;<BR><BR> while
(wDataLen--)<BR> {<BR>
chChar =
*pchMsg++;<BR>
chChar = ByteInvert(chChar);<BR><BR>
wCRC ^= (((WORD)
chChar) << 8);<BR><BR>
for (i = 0; i < 8; i++)<BR>
{<BR>
if (wCRC & 0x8000)<BR>
wCRC = (wCRC << 1) ^
CRC_16_POLYNOMIALS;<BR>
else<BR>
wCRC <<= 1;<BR>
}<BR> }<BR><BR>
wCRC = WordInvert(wCRC);<BR><BR>
return wCRC;<BR>}<BR><BR>//试验数据:<BR>//
采用Metrowerks
CodeWarrior在DSP56F80x平台上,对这3种方法<BR>//进行了性能测试。<BR>//
----------------------------------------------------------------<BR>//
代码大小(字) 额外存储空间(字)
执行时间(周期数)<BR>//
----------------------------------------------------------------<BR>//
方法1
32
512
540<BR>// 方法2
57
16
1120<BR>// 方法3
142*
0
4598<BR>//<BR>//说明:方法3的代码大小还包括字反转、字节反转程序(这里没有给出源码)<BR>//<BR>//结论:通常在存储空间没有限制的情况下,采用方法1是最好的,毕竟在<BR>//通讯中,保障通讯速度是至关重要的。而方法2也不失为一种很好的方法,<BR>//占用空间很少。而与方法2相比,方法3似乎不占有什么优势。</SPAN><BR></SPAN></TD></TR>
<TR>
<TD class=oblog_t_4><A
href="http://ic921.21ic.org/user1/538/archives/2005/6800.html#">阅读全文<SPAN
id=ob_logreaded></SPAN></A> | <A
href="http://ic921.21ic.org/user1/538/archives/2005/6800.html#cmt">回复(1)</A>
| <A href="http://ic921.21ic.org/showtb.asp?id=6800"
target=_blank>引用通告<SPAN id=ob_tbnum></SPAN></A> | <A
href="http://ic921.21ic.org/user_post.asp?logid=6800"
target=_blank>编辑</A></TD></TR></TBODY></TABLE>
<DIV id=morelog>
<UL>
<LI>上一篇:<A
href="http://ic921.21ic.org/user1/538/archives/2005/5564.html">字节反转(字节颠倒)程序</A>
<LI>下一篇:<A
href="http://ic921.21ic.org/user1/538/archives/2005/6801.html">农历计算</A></LI></UL></DIV>
<STYLE type=text/css>.style1 {
FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #666666
}
</STYLE>
<BR>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all"
cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD class=oblog_t_4><SPAN class=style1><FONT
size=3>回复:CRC16程序<A name=19071></A></FONT></SPAN></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DIV align=right><SPAN class=oblog_text><SPAN
id=n_19071>Like(游客)</SPAN>发表评论于<SPAN
id=t_19071>2006-10-15
15:19:00</SPAN></SPAN></DIV></TD></TR></TBODY></TABLE><SPAN
class=oblog_text><BR><IMG class=ob_face height=48
src="CRC16程序--blove的笔记.files/ico_default.gif" width=48
align=absMiddle><SPAN id=c_19071>
<P>好代码!</P>
<P> </P></SPAN><BR></SPAN></TD></TR>
<TR>
<TD class=oblog_t_4>个人主页 | <A
href="javascript:reply_quote('19071')">引用</A> | <A
href="http://ic921.21ic.org/user1/538/archives/2005/6800.html#top">返回</A>
| <A
href="http://ic921.21ic.org/user_comments.asp?action=del&id=19071"
target=_blank>删除</A> | <A
href="http://ic921.21ic.org/user_comments.asp?action=modify&re=true&id=19071"
target=_blank>回复</A></TD></TR></TBODY></TABLE>
<SCRIPT src="CRC16程序--blove的笔记.files/ad_usercommentjs.htm"></SCRIPT>
<A name=cmt></A>
<H2>发表评论:</H2>
<DIV id=form_comment>
<FORM id=commentform name=commentform
onsubmit="return Verifycomment()" action=/savecomment.asp?logid=6800
method=post>
<UL>大名:<INPUT id=UserName maxLength=20 size=15 name=UserName></UL>
<UL>密码:<INPUT id=Password type=password maxLength=20 size=15
name=Password> (游客无须输入密码)</UL>
<UL>主页:<INPUT id=homepage maxLength=50 size=42 value=http://
name=homepage></UL>
<UL>标题:<INPUT id=commenttopic maxLength=50 size=42
value=Re:CRC16程序 name=commenttopic></UL>
<UL><INPUT id=edit type=hidden name=edit>
<DIV id=oblog_edit>21IC页面载入....</DIV></UL>
<UL><SPAN
id=ob_code></SPAN><INPUT type=submit value=" 提交 "></UL></FORM></DIV></TD></TR>
<TR>
<TD
width="100%"></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></CENTER></DIV>
<SCRIPT src="CRC16程序--blove的笔记.files/ad_userbotjs.htm"></SCRIPT>
<DIV id=powered><A href="http://blog.21ic.com/" target=_blank><IMG
alt="Powered by 21ic." src="CRC16程序--blove的笔记.files/oblog_powered.gif"
border=0></A></DIV>
<SCRIPT src="CRC16程序--blove的笔记.files/show_subject.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_placard.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/200512.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_search.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_newblog.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_comment.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_mygroups.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_myfriend.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_newmessage.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_info.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_links.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/show_blogname.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/count.htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/commentedit.htm"></SCRIPT>
<SCRIPT src="E:\梁锁明\其他\常用电子资料\CRC16程序--blove的笔记.files\count(1).htm"></SCRIPT>
<SCRIPT src="E:\梁锁明\其他\常用电子资料\CRC16程序--blove的笔记.files\count(2).htm"></SCRIPT>
<SCRIPT src="CRC16程序--blove的笔记.files/login.htm"></SCRIPT>
<SCRIPT language=javascript>if (chkdiv('txml')) {document.getElementById('txml').innerHTML='<a href="http://www.oblog.cn/rss/?rss=http://blog.21ic.org/user1/538/rss2.xml" target="_blank"><img src="http://www.oblog.cn/xml.jpg" border="0" /></a>';}</SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -