用VB实现查表法计算CRC码的CRC校验软件设计课程设计报告.docx
- 文档编号:8797269
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:107.92KB
用VB实现查表法计算CRC码的CRC校验软件设计课程设计报告.docx
《用VB实现查表法计算CRC码的CRC校验软件设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《用VB实现查表法计算CRC码的CRC校验软件设计课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
用VB实现查表法计算CRC码的CRC校验软件设计课程设计报告
用查表法计算CRC码的CRC校验软件设计
通信0903班、学号0909091609、姓名陈洪亮;指导老师:
王国才,杨政宇
1.设计目标
用查表法计算CRC码的CRC校验软件设计。
2.设计原理和方法
原理循环冗余码校验英文名称为CyclicalRedundancyCheck,简称CRC。
它是利用除法及余数的原理来作错误侦测(ErrorDetecting)的。
实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。
CRC32循环冗余校验标准多项为CRC(32位)=X32+X26+X23+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1
其对应的数字就为:
100000100110000010001110110110111也就是0x04C11DB7(多项式对应的数字可能颠倒,颠倒后得到的是0Xedb88320,其实也是正确的)。
CRC32要求输入的字节要颠倒,那么在程序中,在对每个字节处理前,还要先把这个字节先颠倒一下,再处理,那很麻烦。
所以就把“直接查表法”算法颠倒一下(查询表颠倒),那么算法就可以直接处理不颠倒的字节了,就方便多了。
比如,直接查询表的[01H]=04C11DB7H,因为01H镜像后是80H,04C11DB7H镜像后是EDB88320H,就得到正规查询表的[80H]=EDB88320H。
举例来说,假设待测的原始数据是10H,简单起见,不考虑寄存器移出的字节的影响(即假设它是00H)“直接查表法”,原始数据先颠倒为01H,根据01H查表得04C11DB7H,寄存器移出的字节是向左移。
“颠倒查表法”,直接根据原始数据10H查表得EDB88320H,寄存器移出的字节是向右移。
可见,这时这二个方法本质上是一样的。
方法首先是表的生成,查表法一次处理一个字节的数据,所以crc32表有256个项(2^8),crc32多项式自己与自己异或,使左移出去的8位数字,为0到255,然后剩余的的值作为直接查表法表项。
然后把表镜像处理,生成颠倒查表法表值:
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
然后是查表:
●将寄存器向右移动一个字节。
●将刚移出的那个字节与待测数据中的新字节做XOR运算,得到一个指向查询表的索引值。
●将索引所指的表值与寄存器做XOR运算。
●如数据没有全部处理完,则跳到步骤1。
最后把输入待测数据和生成的CRC32码储存到本地共享文件夹。
接收端接收待测数据进行CRC32码的计算,将生成的数据与接收到的CRC32码进行对比,相同校验成功,不同则不成功
3.设计的功能
能在两台计算机机上运行程序,一台产生CRC码,另一台校验。
4.
程序框图
输入端:
接收端:
否
是
5.程序清单
输入端
DimCRC32Table(255)AsLong
'创建表用于查表法
PublicFunctioncrc32str(ByValitemAsString)AsString
DimiAsLong,iCRCAsLong,lngAAsLong,retAsLong
Dimb()AsByte,bytTAsByte,bytCAsByte
b=StrConv(item,vbFromUnicode)
mkTable
iCRC=&HFFFFFFFF
Fori=0ToUBound(b)
bytC=b(i)
bytT=(iCRCAnd&HFF)XorbytC
lngA=((iCRCAnd&HFFFFFF00)\&H100)And&HFFFFFF
iCRC=lngAXorCRC32Table(bytT)
Next
ret=iCRCXor&HFFFFFFFF
crc32str=Right("00000000"&Hex(ret),8)
EndFunction
'校验CRC32按钮事件处理
PrivateSubCommand1_Click()
DimtmpAsString
DimstmpAsString
sTemp="C:
\Users\Administrator\Desktop\code1.ini"
OpensTempForOutputAs#1
Print#1,Text1.Text
Close#1
Text2.Text=crc32str(Text1.Text)
sTemp="C:
\Users\Administrator\Desktop\CRC32.ini"
OpensTempForOutputAs#1
Print#1,Text2.Text
Close#1
EndSub
'以查表法建立Table函数
PublicFunctionmkTable()
StaticexistTBAsBoolean
DimdataAsString
DimiAsInteger
IfexistTBThenExitFunction
data="0000000077073096EE0E612C990951BA076DC419706AF48FE963A5359E6495A3"
data=data+"0EDB883279DCB8A4E0D5E91E97D2D98809B64C2B7EB17CBDE7B82D0790BF1D91"
data=data+"1DB710646AB020F2F3B9714884BE41DE1ADAD47D6DDDE4EBF4D4B55183D385C7"
data=data+"136C9856646BA8C0FD62F97A8A65C9EC14015C4F63066CD9FA0F3D638D080DF5"
data=data+"3B6E20C84C69105ED56041E4A26771723C03E4D14B04D447D20D85FDA50AB56B"
data=data+"35B5A8FA42B2986CDBBBC9D6ACBCF94032D86CE345DF5C75DCD60DCFABD13D59"
data=data+"26D930AC51DE003AC8D75180BFD0611621B4F4B556B3C423CFBA9599B8BDA50F"
data=data+"2802B89E5F058808C60CD9B2B10BE9242F6F7C8758684C11C1611DABB6662D3D"
data=data+"76DC419001DB710698D220BCEFD5102A71B1858906B6B51F9FBFE4A5E8B8D433"
data=data+"7807C9A20F00F9349609A88EE10E98187F6A0DBB086D3D2D91646C97E6635C01"
data=data+"6B6B51F41C6C6162856530D8F262004E6C0695ED1B01A57B8208F4C1F50FC457"
data=data+"65B0D9C612B7E9508BBEB8EAFCB9887C62DD1DDF15DA2D498CD37CF3FBD44C65"
data=data+"4DB261583AB551CEA3BC0074D4BB30E24ADFA5413DD895D7A4D1C46DD3D6F4FB"
data=data+"4369E96A346ED9FCAD678846DA60B8D044042D7333031DE5AA0A4C5FDD0D7CC9"
data=data+"5005713C270241AABE0B1010C90C20865768B525206F85B3B966D409CE61E49F"
data=data+"5EDEF90E29D9C998B0D09822C7D7A8B459B33D172EB40D81B7BD5C3BC0BA6CAD"
data=data+"EDB883209ABFB3B603B6E20C74B1D29AEAD547399DD277AF04DB261573DC1683"
data=data+"E3630B1294643B840D6D6A3E7A6A5AA8E40ECF0B9309FF9D0A00AE277D079EB1"
data=data+"F00F93448708A3D21E01F2686906C2FEF762575D806567CB196C36716E6B06E7"
data=data+"FED41B7689D32BE010DA7A5A67DD4ACCF9B9DF6F8EBEEFF917B7BE4360B08ED5"
data=data+"D6D6A3E8A1D1937E38D8C2C44FDFF252D1BB67F1A6BC57673FB506DD48B2364B"
data=data+"D80D2BDAAF0A1B4C36034AF641047A60DF60EFC3A867DF55316E8EEF4669BE79"
data=data+"CB61B38CBC66831A256FD2A05268E236CC0C7795BB0B4703220216B95505262F"
data=data+"C5BA3BBEB2BD0B282BB45A925CB36A04C2D7FFA7B5D0CF312CD99E8B5BDEAE1D"
data=data+"9B64C2B0EC63F226756AA39C026D930A9C0906A9EB0E363F7207678505005713"
data=data+"95BF4A82E2B87A147BB12BAE0CB61B3892D28E9BE5D5BE0D7CDCEFB70BDBDF21"
data=data+"86D3D2D4F1D4E24268DDB3F81FDA836E81BE16CDF6B9265B6FB077E118B74777"
data=data+"88085AE6FF0F6A7066063BCA11010B5C8F659EFFF862AE69616BFFD3166CCF45"
data=data+"A00AE278D70DD2EE4E0483543903B3C2A7672661D06016F74969474D3E6E77DB"
data=data+"AED16A4AD9D65ADC40DF0B6637D83BF0A9BCAE53DEBB9EC547B2CF7F30B5FFE9"
data=data+"BDBDF21CCABAC28A53B3933024B4A3A6BAD03605CDD7069354DE572923D967BF"
data=data+"B3667A2EC4614AB85D681B022A6F2B94B40BBE37C30C8EA15A05DF1B2D02EF8D"
Fori=0To255
CRC32Table(i)="&h"&Mid(data,i*9+1,8)
Next
existTB=True
EndFunction
PrivateSubForm_Load()
EndSub
PrivateSubText2_Change()
EndSub
接收端
DimCRC32Table(255)AsLong
'创建表用于查表法
PublicFunctioncrc32str(ByValitemAsString)AsString
DimiAsLong,iCRCAsLong,lngAAsLong,retAsLong
Dimb()AsByte,bytTAsByte,bytCAsByte
b=StrConv(item,vbFromUnicode)
mkTable
iCRC=&HFFFFFFFF
Fori=0ToUBound(b)
bytC=b(i)
bytT=(iCRCAnd&HFF)XorbytC
lngA=((iCRCAnd&HFFFFFF00)\&H100)And&HFFFFFF
iCRC=lngAXorCRC32Table(bytT)
Next
ret=iCRCXor&HFFFFFFFF
crc32str=Right("00000000"&Hex(ret),8)
EndFunction
'校验CRC32按钮事件处理
PrivateSubCommand1_Click()
DimtmpAsString
DimstmpAsString
sTemp="C:
\DocumentsandSettings\AllUsers\桌面\code1.ini"
OpensTempForInputAs#1
LineInput#1,tmp
Text1.Text=tmp
Close#1
sTemp="C:
\DocumentsandSettings\AllUsers\桌面\CRC32.ini"
OpensTempForInputAs#1
LineInput#1,tmp
Text2.Text=tmp
Close#1
Text3.Text=crc32str(Text1.Text)
a=Text2.Text
c=Text3.Text
If(a<>c)ThenText4.Text="校验不成功"ElseText4.Text="校验成功"
EndSub
'以查表法建立Table函数
PublicFunctionmkTable()
StaticexistTBAsBoolean
DimdataAsString
DimiAsInteger
IfexistTBThenExitFunction
data="0000000077073096EE0E612C990951BA076DC419706AF48FE963A5359E6495A3"
data=dat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 实现 查表法 计算 CRC 校验 软件设计 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)