Pycrc教程(自动生成C语言的CRC代码工具)

From:http://www.tty1.net/pycrc/tutorial_en.html

本教程指导您如何在你的程序中使用pycrc生成代码。它使用CRC代码的最简单和最通用的版本,其中所有的参数被定义。我们将生成头文件、CRC源文件和简单的主程序文件,使用GCC编译和检查结果。

如何运行pycrc.py

本节解释如何运行Python脚本。如果您知道如何运行它,那么请转到下一节。最安全的运行pycrc.py的方法是在命令行的开始添加python命令,如下:

python pycrc.py --help

在Unix-风格的系统中可以让pycrc.py变成可执行,并且如下命令进行调用:

chmod +x pycrc.py

./pycrc.py --help

生成代码

使用下面的命令生成头文件crc.h:

python pycrc.py --model crc-16 --algorithm table-driven --generate h –o crc.h

也使用类似的方法生成CRC源代码(crc.c):

Python pycrc.py --model crc-16 --algorithm table-driven --generate c –o crc.c

我们使用CRC-16模型和表驱动算法,你可以选择各种不同的模式,并且使用在pycrc man页中描述的命令行选项指定自己的模型。

编写main文件

下面是一个基本的main.c程序,用来计算字符串常量“123456789”的CRC.

#include <stdio.h>

#include <string.h>

#include "crc.h"

static char str[] = "123456789";

int main(void)

{

crc_t crc;

crc = crc_init();

crc = crc_update(crc, (unsigned char *)str, strlen(str));

crc = crc_finalize(crc);

printf("0x%lx\n", (unsigned long)crc);

return 0;

}

注意你能调用crc_update()多次,这意味着你不必一次计算整个数据的CRC。理论上你能够为输入数据的每个字节调用crc_update()。但是记住传递先前计算的crc值(例子中的crc变量)作为crc_update()的参数。

又一个例子,这里main程序每次一个字节的计算CRC值,显然代码得到与上面代码相同的结果。

int main(void)

{

crc_t crc;

int i;

crc = crc_init();

for (i = 0; i < strlen(str); i++) {

crc = crc_update(crc, (unsigned char *)&str[i], 1);

}

crc = crc_finalize(crc);

printf("0x%lx\n", (unsigned long)crc);

return 0;

}

编译和执行

下面的两行编译源代码并且调用二进制文件,希望你能得到希望的结果0Xbb3d。

gcc -W -Wall -std=c99 crc.c main.c –o crc

./crc

验证结果

现在检查二进制程序是否给你所希望的结果:

python pycrc.py --model crc-16

你也能验证结果使用在线的计算器,例如:breitbandkatze.de网站上的CRC计算器(http://www.zorc.breitbandkatze.de/crc.html)。

提示

一个更复杂的main.c文件可以使用pycrc的--generate c-main命令行参数来生成。注意这个选项把crc.c文件和main.c文件合并到一个输出文件中。如果你不确定如何调用crc函数,请使用这个选项。

Pycrc帮助页中包括如何使用pycrc的其它一些例子。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值