资源简介
CRC32计算程序,生成多项式是:
G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
该生成多项式是IEEE的标准,应用在ETH,wifi等多个协议里面。
电脑上的文件校验工具,也基本采用这个crc32.
用matlab实现,带注释。
包含little-endian、big-endian算法,已及相应的查表算法。
此外,还专门针对cksum、hashcalc这两个常见的校验软件,写了计算例子。
如果还在疑惑为什么cksum和crc32、hashcalc的结果不一样,建议看一下这个程序。

代码片段和文件信息
function cksum
test1;
test2;
test3;
test4;
crctab = gen_tbl_le();
crctab = gen_tbl_be();
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% test 1 little endian just like HashCalc.exe
function test1
msg = [‘02‘; ‘02‘; ‘58‘; ‘60‘;
‘23‘; ‘5A‘; ‘3D‘; ‘6F‘;
‘EA‘; ‘84‘; ‘E7‘; ‘AA‘;
‘6C‘; ‘13‘; ‘E4‘; ‘15‘;
‘EB‘; ‘D8‘; ‘C2‘; ‘34‘;
‘A5‘; ‘12‘ ];
ccc = [‘D8‘; ‘8B‘; ‘5D‘; ‘84‘];
msg = de2bi(hex2dec(msg) 8 ‘left-msb‘);
ccc = de2bi(hex2dec(ccc) 8 ‘left-msb‘);
% generate crc
crc = crc32_le(ones(132) msg);
crc = 1-crc(32:-1:1);
crc_hex = dec2hex(bi2de(crc)); % 845D8BD8
disp(crc_hex);
% check crc
crc = crc32_le(ones(132) [msg; ccc]);
crc_hex = dec2hex(bi2de(crc)); % C704DD7B
disp(crc_hex);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% test 2 big endian ieee eth spec example
function test2
msg = [‘40‘; ‘40‘; ‘1A‘; ‘06‘;
‘C4‘; ‘5A‘; ‘BC‘; ‘F6‘;
‘57‘; ‘21‘; ‘E7‘; ‘55‘;
‘36‘; ‘C8‘; ‘27‘; ‘A8‘;
‘D7‘; ‘1B‘; ‘43‘; ‘2C‘;
‘A5‘; ‘48‘ ];
ccc = [‘1B‘; ‘D1‘; ‘BA‘; ‘21‘];
msg = de2bi(hex2dec(msg) 8 ‘left-msb‘);
ccc = de2bi(hex2dec(ccc) 8 ‘left-msb‘);
% generate crc
crc = crc32_be(ones(132) msg);
crc = 1-crc(32:-1:1);
crc_hex = dec2hex(bi2de(crc)); % 1BD1BA21
disp(crc_hex);
% check crc
crc = crc32_be(ones(132) [msg; ccc]);
crc = crc(32:-1:1);
crc_hex = dec2hex(bi2de(crc)); % C704DD7B
disp(crc_hex);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% test 3 methord of linux coreutil cksum
function test3
msg = [‘40‘; ‘40‘; ‘1A‘; ‘06‘;
‘C4‘; ‘5A‘; ‘BC‘; ‘F6‘;
‘57‘; ‘21‘; ‘E7‘; ‘55‘;
‘36‘; ‘C8‘; ‘27‘; ‘A8‘;
‘D7‘; ‘1B‘; ‘43‘; ‘2C‘;
‘A5‘; ‘48‘ ];
len = size(msg 1);
lenhex = [];
while len>0
tmp = mod(len 256); % len & 0xFF
len = bitshift(len -8); % len>>8
lenhex = [lenhex; dec2hex(tmp 2)];
end
len = size(msg 1);
msg = [msg; lenhex]; % calc crc32 include length
msg = de2bi(hex2dec(msg) 8 ‘left-msb‘);
% generate crc
crc = crc32_be(zeros(132) msg);
crc_dec = bi2de(1-crc(32:-1:1));
disp(sprintf(‘%d %d filename‘ crc_dec len));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% test 3 compare width table methord
function test4
% little endian
msg = [‘02‘; ‘02‘; ‘58‘; ‘60‘;
‘23‘; ‘5A‘; ‘3D‘; ‘6F‘;
‘EA‘; ‘84‘; ‘E7‘; ‘AA‘;
‘6C‘; ‘13‘; ‘E4‘; ‘15‘;
‘EB‘; ‘D8‘; ‘C2‘; ‘34‘;
‘A5‘; ‘12‘ ];
msg = de2bi(hex2dec(msg) 8 ‘left-msb‘);
crc1 = crc32_le(ones(132) msg);
crc2 = crc32_le_tbl(ones(132) msg);
crc1_hex = dec2hex(bi2de(1-crc1(32:-1:1)));
crc2_hex = dec2hex(bi2de(1-crc2(32:-1:1)));
disp([crc1_hex ‘ ‘ crc2_hex]);
% big endian
msg = [‘40‘; ‘40‘; ‘1A‘; ‘06‘;
‘C4‘; ‘5A‘; ‘B
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5651 2013-06-20 11:49 crc32.m
文件 12824 2013-06-21 13:34 cksum.m
相关资源
- ieee14节点的潮流计算
- IEEE14节点潮流计算程序
- 三点估计法潮流计算matlab源程序
- 几乎包含IEEE所有节点的牛拉潮流计算
- The Finite Element Method for Thermal and Stre
- IEEE 802.15.4 Zigbee Matlab模拟器源代码
- IEEE802.15.4a信道模型
- Numerical Methods Using MATLAB_Mathews_4th(英
- PSS/E数据转IEEE格式的matlab程序
- 数值方法(MATLAB版)第四版英文文字
- Numerical Methods for Chemical Engineering App
- spectral methods in matlab174886
- The.Finite.Element.Method.using.MATLAB.-.Kwon.
- ieee118节点潮流计算程序及节点数据
- Spectral Methods in Matlab
- Numerical Methods Using MATLAB_Mathews 第4版
- Numerical Methods Using MATLAB_Mathews_4th中英
- Numerical Methods Using Matlab.pdf
- IEEE33节点前推回代程序
- IEEE算例潮流程序
- IEEE14节点微网模型 包括PV模型 储能系
- IEEE33潮流计算
- IEEE33节点
- 基于IEEE33节点前推回代 matlab
- IEEE 39节点系统
- 牛顿拉夫逊算法潮流计算IEEE14节点
-
matlab simuli
nk 802.11b的模块仿真及分析 - matpower ieee33 case
- IEEE 33节点配电网
- 33节点潮流计算
评论
共有 条评论