原创
“手动的”CRC16CCITT(1021)的16字表长查表演算过程
参见:CRC16CCITT(1021)的16字表长查表程序
原贴出处:http://bbs.21ic.com/icview-139615-1-1.html
5楼: 哈哈~~~既然大家喜欢,俺就表演个“手动的”CRC16CCITT(1021)的16字表长查表演算过程:
CRC16Table[16]={ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,//注意本行的0x1021 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, };
例如 CRC16,初值为0x0000, 求CRC16[0x1234]=0x13C6:
第1步: CRC[0x1234>>12]=CRC[0x01]=0x1021 0x1234变为0x2340
第2步: (0x1021<<4) ^ CRC[(0x1021>>12) ^ (0x2340>>12)]=0x0210 ^ CRC[0x01 ^ 0x02] =0x0210 ^ CRC[0x03]=0x0210 ^ 0x3063 = 0x3273 0x2340变为0x3400
第3步: (0x3273<<4) ^ CRC[(0x3273>>12) ^ (0x3400>>12)]=0x2730 ^ CRC[0x03 ^ 0x03] =0x2730 ^ CRC[0x00]=0x2730 ^ 0x0000 = 0x2730 0x3400变为0x4000
第4步: (0x2730<<4) ^ CRC[(0x2730>>12) ^ (0x4000>>12)]=0x7300 ^ CRC[0x02 ^ 0x04] =0x7300 ^ CRC[0x06]=0x7300 ^ 0x60C6 = 0x13C6
例如 CRC16,初值为0xFFFF, 求CRC16[0x1234]=0x0EC9:
初始化: 0x1234 ^ 0xFFFF = 0xEDCB 第1步: CRC[0xEDCB>>12]=CRC[0x0E]=0xE1CE 0xEDCB变为0xDCB0
第2步: (0xE1CE<<4) ^ CRC[(0xE1CE>>12) ^ (0xDCB0>>12)]=0x1CE0^ CRC[0x0E ^ 0x0D] =0x1CE0^ CRC[0x03]=0x1CE0^ 0x3063 = 0x2C83 0xDCB0变为0xCB00
第3步: (0x2C83<<4) ^ CRC[(0x2C83>>12) ^ (0xCB00>>12)]=0xC830^ CRC[0x02 ^ 0x0C] =0xC830 ^ CRC[0x0E]=0xC830 ^ 0xE1CE= 0x29FE 0xCB00变为0xB000
第4步: (0x29FE<<4) ^ CRC[(0x29FE>>12) ^ (0xB000>>12)]=0x9FE0^ CRC[0x02 ^ 0x0B] =0x9FE0^ CRC[0x09]=0x9FE0^ 0x9129= 0x0EC9
使用演算工具:http://www.hotc51.com/HotPower_HotWC3.html
或查表: CRC16Table[16]={ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,//注意本行的0x1021 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, }; |
|
本文可以证明菜农的脑浆是“红色的”~~~
16*2个字节“比拼”256*2个字节的结果:
循环次数是4次,而后者为2次。即速度降低1倍但空间被压缩16倍,不知菜农失败否~~~
|
|
| |
文章评论(0条评论)
登录后参与讨论