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