📄 化境编程界.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0048)http://www.5xsoft.com/data/200107/0716174401.htm -->
<HTML><HEAD><TITLE>化境编程界</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
FONT-SIZE: 9pt; COLOR: #222222
}
.tx1 {
BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; WIDTH: 80px; BORDER-BOTTOM: 1px solid
}
.bt {
BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: 1px solid; WIDTH: 40px; CURSOR: hand; BORDER-BOTTOM: 1px solid; HEIGHT: 18px; BACKGROUND-COLOR: #f3eae9
}
</STYLE>
<STYLE type=text/css>.td1 {
BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; LINE-HEIGHT: 18px; BORDER-BOTTOM: #cccccc 1px solid
}
.td2 {
BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: 0px; BORDER-LEFT: 0px; COLOR: #333333; LINE-HEIGHT: 18px; BORDER-BOTTOM: 0px
}
.td3 {
BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: 0px; BORDER-LEFT: #cccccc 1px solid; COLOR: #333333; LINE-HEIGHT: 16px; BORDER-BOTTOM: 0px
}
</STYLE>
<STYLE type=text/css>A {
COLOR: #000000; TEXT-DECORATION: none
}
A:hover {
COLOR: #ff3300; TEXT-DECORATION: underline
}
</STYLE>
<SCRIPT language=javascript src="化境编程界.files/new.js"></SCRIPT>
<SCRIPT language=javascript>
function proc_search()
{
var obj;
if(!window.search.value)
{
alert('请输入要搜索的内容');
return;
}
location.href='http://www.5xsoft.com/search.asp?type=0&search='+window.search.value;
}
</SCRIPT>
<STYLE type=text/css>A.a1 {
COLOR: #ffffff; TEXT-DECORATION: none
}
A.a1:hover {
COLOR: #ff9900; TEXT-DECORATION: underline
}
</STYLE>
<STYLE type=text/css>.td4 {
BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; LINE-HEIGHT: 16px; BORDER-BOTTOM: medium none
}
</STYLE>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY bottomMargin=0 bgColor=#b3befd leftMargin=0 topMargin=0 rightMargin=0>
<TABLE height=16 cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD align=left width=415 height=16> </TD>
<TD align=left width=46 bgColor=#000000><IMG height=16
src="化境编程界.files/angle.gif" width=40></TD>
<TD align=middle width=308 bgColor=#000000><FONT color=#ffffff><A class=a1
href="http://www.5xsoft.com/menu/index2.htm">化境作品</A> | <A class=a1
href="http://www.5xsoft.com/about.htm">关于作者</A> | <A class=a1
href="http://www.5xsoft.com/menu/index0.htm">技术文章</A> | <A class=a1
href="http://bbs.5xsoft.com/">留言板</A></FONT></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR align=middle>
<TD vAlign=bottom width=110 bgColor=#b3befd height=60><IMG height=60
src="化境编程界.files/5xsoft.gif" width=110></TD>
<TD width=468> </TD>
<TD vAlign=bottom width=191 bgColor=#b3befd> </TD></TR>
<TR align=left>
<TD colSpan=3 height=5></TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE height=332 cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top width=170 bgColor=#eeeeee>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top bgColor=#b3befd>
<TD colSpan=2 height=65><BR> 站内文章搜索:<BR> <INPUT class=tx1
id=search name=search> <INPUT class=bt style="WIDTH: 40px" onclick=proc_search(); type=button value=搜索 name=button>
</TD></TR>
<TR>
<TD width="9%"> </TD>
<TD width="91%"> </TD></TR>
<TR>
<TD bgColor=#eeeeee height=257> </TD>
<TD class=td4 vAlign=top><STRONG>相关内容: </STRONG><BR>- <A
title=Combo的自动查询技术
href="http://www.5xsoft.com/data/200302/2709554101.htm">Combo的自动查询技术</A><BR>-
<A title=在VB5中生成统计图形
href="http://www.5xsoft.com/data/200302/2709513601.htm">在VB5中生成统计图形</A><BR>-
<A title="VB.net 编码规范(也适用于C#)"
href="http://www.5xsoft.com/data/200202/0416024301.htm">VB.net
编码规范(也适用于C#)</A><BR>- <A title=VB中不规则图形热点的实现
href="http://www.5xsoft.com/data/200201/3108142801.htm">VB中不规则图形热点的实现</A><BR>-
<A title=VB随机图像的魅力
href="http://www.5xsoft.com/data/200201/3108134001.htm">VB随机图像的魅力</A><BR></TD></TR></TBODY></TABLE></TD>
<TD class=td3 vAlign=top align=left width=608 bgColor=#ffffff>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="5%" rowSpan=5> </TD>
<TD width="95%" height=19> </TD>
<TD width=0% rowSpan=5> </TD></TR>
<TR>
<TD class=td1 vAlign=center align=left height=33><A
href="http://www.5xsoft.com/">化境编程界</A> -> <A
href="http://www.5xsoft.com/menu/index0.htm">技术文章 </A>-> <A
href="http://www.5xsoft.com/menu/index0_3_1.htm">VB/VB.Net
</A></TD></TR>
<TR>
<TD class=td1 vAlign=center align=middle height=33><FONT
size=+1><B><BR>VB下如何编写CRC校验程序(1) </B></FONT><BR><BR>[ 作者: 栾金奎
添加时间: 2001-7-7 16:19:08 ]<BR></TD></TR>
<TR>
<TD class=td1 vAlign=top align=left
height=151><BR> 随着计算机技术的不断发展,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。由于传输距离、现场状况等诸多可能出现的因素影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。为了防止错误所带来的影响,一般在通讯时采取数据校验的办法,而循环冗余码校验是最常用的校验方法之一。<BR><BR>一、
循环冗余码校验原理<BR><BR> 循环冗余码校验英文名称为Cyclical Redundancy
Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error
Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。<BR>根据应用环境与习惯的不同,CRC又可分为以下几种标准:<BR> ①CRC-12码;<BR> ②CRC-16码;<BR> ③CRC-CCITT码;<BR> ④CRC-32码。<BR> CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用是来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。<BR>下面以最常用的CRC-16为例来说明其生成过程。<BR> CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或,之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。<BR> 下面为CRC的计算过程:<BR> 1.设置CRC寄存器,并给其赋值FFFF(hex)。<BR> 2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。<BR> 3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。<BR> 4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。<BR> 5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。<BR> 6.重复第2至第5步直到所有数据全部处理完成。<BR> 7.最终CRC寄存器的内容即为CRC值。<BR><BR>二、
循环冗余码校验程序的编写<BR><BR> 明白了CRC校验码的产生过程,编写起程序来就非常容易了。由于Visual
Basic的广泛普及以及其在数据通讯中的重要地位,下面就以VB语言来编写CRC的生成程序,其它语言只需稍做修改即可。<BR> 编写CRC校验程序有两种办法:一种为计算法,一种为查表法。下面对两种方法分别讨论。<BR><BR> 1.计算法<BR> 计算法就是依据CRC校验码的产生原理来设计程序。其优点是模块代码少,修改灵活,可移植性好。其缺点为计算量大。为了便于理解,这里假定了三位数据,而多项式码为A001(hex)。<BR> 在窗体上放置一命令按钮Command1,并添加如下代码:<BR><BR> Private
Sub Command1_Click()<BR> Dim CRC() As Byte<BR> Dim d() As Byte
'待传输数据<BR> ReDim d(2) As Byte<BR> d(0) = 123<BR> d(1) =
112<BR> d(2) = 135<BR> CRC = CRC16(d)
'调用CRC16计算函数<BR> 'CRC(0)为高位<BR> 'CRC(1)为低位<BR> End
Sub<BR> 注意:在数据传输时CRC的低位可能在前,而高位在后。<BR><BR> Function CRC16(data()
As Byte) As String<BR> Dim CRC16Lo As Byte, CRC16Hi As
Byte 'CRC寄存器<BR> Dim CL As Byte, CH As
Byte '多项式码&HA001<BR> Dim SaveHi As Byte, SaveLo As
Byte<BR> Dim i As Integer<BR> Dim Flag As Integer<BR> CRC16Lo
= &HFF<BR> CRC16Hi = &HFF<BR> CL = &H1<BR> CH =
&HA0<BR> For i = 0 To UBound(data)<BR> CRC16Lo = CRC16Lo
Xor data(i) '每一个数据与CRC寄存器进行异或<BR> For Flag = 0 To
7<BR> SaveHi = CRC16Hi<BR> SaveLo = CRC16Lo<BR> CRC16Hi
= CRC16Hi \ 2 '高位右移一位<BR> CRC16Lo = CRC16Lo \
2 '低位右移一位<BR> If ((SaveHi And &H1) = &H1) Then
'如果高位字节最后一位为1<BR> CRC16Lo = CRC16Lo Or
&H80 '则低位字节右移后前面补1<BR> End If
'否则自动补0<BR> If ((SaveLo And &H1) = &H1) Then
'如果LSB为1,则与多项式码进行异或<BR> CRC16Hi = CRC16Hi Xor
CH<BR> CRC16Lo = CRC16Lo Xor CL<BR> End If<BR> Next
Flag<BR> Next i<BR> Dim ReturnData(1) As
Byte<BR> ReturnData(0) = CRC16Hi 'CRC高位<BR> ReturnData(1)
= CRC16Lo 'CRC低位<BR> CRC16 = ReturnData<BR> End
Function<BR><BR> 2.查表法<BR> 查表法的优缺点与计算法的正好相反。为了便于比较,这里所有的假定与计算法的完全相同,都而在窗体上放置一个Command1的按钮,其代码部分与上面的也完全一致。下面只介绍CRC函数的编写源代码。<BR><BR> Private
Function CRC16(data() As Byte) As String<BR> Dim CRC16Hi As
Byte<BR> Dim CRC16Lo As Byte<BR> CRC16Hi =
&HFF<BR> CRC16Lo = &HFF<BR> Dim i As Integer<BR> Dim
iIndex As Long<BR> For i = 0 To UBound(data)<BR> iIndex =
CRC16Lo Xor data(i)<BR> CRC16Lo = CRC16Hi Xor
GetCRCLo(iIndex) '低位处理<BR> CRC16Hi =
GetCRCHi(iIndex) '高位处理<BR> Next i<BR> Dim ReturnData(1)
As Byte<BR> ReturnData(0) = CRC16Hi 'CRC高位<BR> ReturnData(1)
= CRC16Lo 'CRC低位<BR> CRC16 = ReturnData<BR> End
Function<BR><BR> 'CRC低位字节值表<BR> Function GetCRCLo(Ind As Long) As
Byte<BR> GetCRCLo = Choose(Ind + 1, &H0, &HC1, &H81,
&H40, &H1, &HC0, &H80, &H41, &H1, &HC0,
&H80, &H41, &H0, &HC1, &H81, &H40, &H1,
&HC0, &H80, &H41, &H0, &HC1, &H81, &H40,
&H0, &HC1, &H81, &H40, &H1, &HC0, &H80,
&H41, &H1, &HC0, &H80, &H41, &H0, &HC1,
&H81, &H40, &H0, &HC1, &H81, &H40, &H1,
&HC0, &H80, &H41, &H0, &HC1, &H81, &H40,
&H1, &HC0, &H80, &H41, &H1, &HC0, &H80,
&H41, &H0, &HC1, &H81, &H40, &H1, &HC0,
&H80, &H41, &H0, &HC1, &H81, &H40, &H0,
&HC1, &H81, &H40, &H1, &HC0, &H80, &H41,
&H0, &HC1, &H81, &H40, &H1, &HC0, &H80,
&H41, &H1, &HC0, &H80, &H41, &H0, &HC1,
&H81, &H40, &H0, &HC1, &H81, &H40, &H1,
&HC0, &H80, &H41, &H1, &HC0, &H80, &H41,
&H0, &HC1, &H81, &H40, &H1, &HC0, &H80,
&H41, &H0, &HC1, &H81, &H40, &H0, &HC1,
&H81, &H40, &H1, &HC0, &H80, &H41, &H1,
&HC0, _ <BR><BR></TD></TR>
<TR>
<TD class=td4 vAlign=center align=middle
height=48><!--prevpage--> <A
href="http://www.5xsoft.com/data/200107/0716174401_1.htm">下一页 <FONT
face=Webdings>8</FONT></A> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE height=58 cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD align=middle width=784 height=58><BR>© Copyright 化境编程界 稻香老农 2000.4 -
2002.12 | OICQ:593737 | Email: 5xsoft@21cn.com <IMG
src="化境编程界.files/top.htm" border=0></TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -