资源简介
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
相关资源
-
Matlab code of IEEE 802.15.4 MAC la
yer Perf - IEEE-6 14 30节点系统 MATLAB 潮流计算
- IEEE 33节点配电网模型.rar
- Matlab仿真IEEE 802.11a系统.zip
- matlab开发-IEEE754二进制表示
- IEEE802.11b 物理层DBPSK编码程序
- 前推回代法计算IEEE33节点潮流
- VRP using GA methods用遗传算法解决VRP问题
-
simuli
nk仿真IEEE33节点模型 - 基于粒子群算法的无功优化MATLAB源代
- IEEE37节点线路参数
- IEEE30节点测试系统matlab M文件,包含各
- Eriksson method
- M2M4method SNR estimation 基于信号二阶四阶
- IEEE39节点系统下分析各支路暂态稳定
- IEEE 标准测试系统原始数据和潮流结果
- ieee33节点潮流计算 (ieee33 power flow)
- 含统一潮流控制器(UPFC)的IEEE9 sim
- IEEE_33bus2
- ieee30节点的半不变量法概率潮流计算
- Numerical Methods using MATLAB 无水印原版
- IEEE_39bus_4WT_mask
- IEEE33Newton matlab上实现《电力系统分析
- PSO of IEEE33 IEEE33节点配电网系统中接
- IEEE30 30节点的潮流计算程序
- IEEE 118 节点的电力系统优化调度程序
- dg-placement
- cascadethreephase
- 配有ieee30节点配电网的潮流计算
- ieee39 bus test system
评论
共有 条评论