`
xitong
  • 浏览: 6195265 次
文章分类
社区版块
存档分类
最新评论

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的其它一些例子。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics