Pycrc教程(自动生成C语言的CRC代码工具)
2011-09-04 23:31
471 查看
From:http://www.tty1.net/pycrc/tutorial_en.html
本教程指导您如何在你的程序中使用pycrc生成代码。它使用CRC代码的最简单和最通用的版本,其中所有的参数被定义。我们将生成头文件、CRC源文件和简单的主程序文件,使用GCC编译和检查结果。
python pycrc.py --help
在Unix-风格的系统中可以让pycrc.py变成可执行,并且如下命令进行调用:
chmod +x pycrc.py
./pycrc.py --help
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页中描述的命令行选项指定自己的模型。
#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;
}
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)。
Pycrc帮助页中包括如何使用pycrc的其它一些例子。
本教程指导您如何在你的程序中使用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的其它一些例子。
相关文章推荐
- 简单好用的Nhibernate代码自动生成工具,自己写的基于动软代码生成器Nhibernate代码自动生成模板及图文教程
- 用Pytohn写了一个根据表结构自动生成C#对像代码的小工具
- SSH开源自动生成代码工具,可自动生成action、service、form、dao、model、vo、sqlmap.xml、.hbm.xml、test等
- iBatis 代码自动生成工具 iBator 及 Example 使用
- 利用Mybatis-generator工具自动生成代码
- 微信小程序前端快速生成工具,让机器自动写代码
- [C#]一步一步开发自己的自动代码生成工具之三:代码生成引擎
- mybatis代码自动生成工具
- Ibatis代码自动生成工具——Abator安装与应用实例
- android mvp快速开发框架介绍(自动生成android代码工具介绍)
- STM32代码自动生成工具,三步搞定一个智能硬件APP开发
- 自动生成导出前端页面的快速开发工具,让代码开发变得简单
- mybatis-generator 代码自动生成工具(maven方式)
- Android自动生成代码工具整理
- 开源!开源!我写的Anto.exe C#代码自动生成工具.欢迎下载。。
- mybatis-generator 代码自动生成工具
- AutoCode (vs插件)自动生成代码插件 下载及使用教程(C#版)
- MCU代码自动生成工具,全面升级
- 代码自动生成工具(三)-Xml读表代码自动生成工具
- Ibatis代码自动生成工具