先学习一下matlab中CRC函数。

语法如下:

h = crc.generator(‘Polynomial', polynomial, ‘param1', val1, etc.)

再看一个例子就比较好容易理解,

% Construct a CRC generator with a polynomial defined
% by x^3+x+1, with zero initial states,
% and with an all-ones final XOR value:
h = crc.generator('Polynomial', [1 0 1 1], ...
'InitialState', [0 0 0], ...
'FinalXOR', [1 1 1])


Polynomial指的是CRC的生成多项式,上面的是二进制表示,同样可以用十六进制表示'0xb',和上面是等效的,InitialState指的是CRC的初始值,FinalXOR指的是最后的输出需不需要做异或,如果为全零其实就是保持原来的值,全1表示为把结果取反。

这里还有几个参数也按我的理解说一下。ReflectInput这是个布尔变量,当它为true时,进入移位寄存器是按byte进去的,所以要求多项式的长度必须是8的倍数。它的default值是false。

我项目中需要的一个例子如下:

h = crc_generator('Polynomial',[1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1],'InitialState',[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0],'FinalXOR',[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);

%这个多项式为x^16+x^15+x^2+1,注意后面'InitialState'和'FinalXOR'的值都是16个0.

crc_din = 3;%这里是十进制,而且可以用load一个文件后面的几行就是为了load一个文件而处理的

crc_din_bi = de2bi(crc_din,2);%转换成2位的二进制,后面的2指的是2位

crc_din_trans = transpose(crc_din_bi);%这个函数的意思就是把crc_din_bi这个矩阵翻转,比如原来crc_din_bi是一个1x2的矩阵,翻转后变成2x1,前面是行数,后面是列数

crc_din_trans_reshape = reshape(crc_din_trans,[],1);%中间是一个方括号。reshaple的意思是把一个矩阵串起来,按照一列串起来

encoded = generate(h,crc_din_trans_reshape);%执行CRC

这个程序运行的结果是

1%原数据

1%原数据

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

后面16位就是输出的CRC值,其实就是0xa

如果要输出一个文件

fid = fopen('crc_out.txt','w+');

for cnt = 1 : size(encoded,1)

fprintf(fid,'%-d\n',encoded(cnt));

end

fclose(fid;)

最新文章

  1. .net错误日志记录(log4)
  2. 创建MyOffice项目
  3. JS 获取自定义标签
  4. POJ 3320 Jessica's Reading Problem
  5. 【HTML5】特性
  6. luvit 初尝鲜
  7. Auto Updating the exe from a network location when application starts z
  8. algorithm@ dijkstra algorithm & prim algorithm
  9. AngularJS中文介绍
  10. ubuntu14.04下chrome浏览器的安装
  11. 构建react项目失败解决办法
  12. Java设计模式知识整理
  13. 最优路径算法合集(附python源码)(原创)
  14. POJ_2376_Cleaning Shifts【贪心】【区间覆盖】
  15. windows下安装rabbitmq的步骤详解
  16. 按钮切换显示不同的内容(js控制)
  17. 实验1 单片机IO口应用及数码管显示
  18. Transaction And Lock--READ COMMITTED隔离级别下的"脏读"
  19. AndroidPn服务端部分bug解决方案
  20. plsql 快捷键配置

热门文章

  1. python正则表达式--特殊字符
  2. JAVA 列表输入学生的信息
  3. unity 使用方法
  4. Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还 是 equals()?它们有何区别?
  5. 论http弥补技术ajax、comet、SPADY、websocket
  6. 【python】__import__
  7. jq-css、class、属性操作
  8. PHP源码安装后设置别名
  9. 解码escape类型的unicode
  10. spring boot 2.0 neo4j 使用