asn1c linux使用方法,asn1c工具使用
解压: tar -zxvfasn1c-0.9.24.tar.gz
依次按照configure,make,make install的步骤编译、安装
出现这个问题:
test -z "/usr/local/share/asn1c"|| /bin/mkdir -p "/usr/local/share/asn1c"
/bin/mkdir: cannot create directory`/usr/local/share/asn1c': Permission denied
make[3]: *** [install-dist_pkgdataDATA]Error 1
make[3]: Leaving directory`/home/liuguili/asn1ctemp/asn1c-0.9.24/skeletons'
make[2]: *** [install-am] Error 2
make[2]: Leaving directory`/home/liuguili/asn1ctemp/asn1c-0.9.24/skeletons'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory`/home/liuguili/asn1ctemp/asn1c-0.9.24/skeletons'
make: *** [install-recursive] Error 1
用sudo make install即可
采用用户手册上的一个例子
liuguili@ubuntu:~/asn1ctemp/test$ vimrectangle.asn1
rectangle.asn1:
RectangleModule1DEFINITIONS ::=
BEGIN
Rectangle ::=SEQUENCE {
height INTEGER,
width INTEGER
}
END
执行命令
asn1c -fnative-types rectangle.asn1
生成一堆编码用的.c,.h
编码清单:
#include
#include
#include
static int write_out(const void *buffer,size_t size, void *app_key)
{
FILE *out_fp = app_key;
size_t wrote;
wrote = fwrite(buffer, 1, size, out_fp);
return (wrote == size)?0:-1;
}
int main(int ac, char **av)
{
Rectangle_t *rectangle;
asn_enc_rval_t ec;
rectangle = calloc(1, sizeof(Rectangle_t));
if(!rectangle)
{
perror("callocfailed");
exit(71);
}
rectangle->height = 42;
rectangle->width = 23;
const char *filename = "Test";
FILE *fp = fopen(filename, "wb");
if(!fp)
{
perror("filename");
exit(71);
}
ec = xer_encode(&asn_DEF_Rectangle, rectangle,XER_F_CANONICAL,write_out, fp);
fclose(fp);
if(ec.encoded == -1)
{
perror("Count not encodeRectangle.\n");
exit(65);
}
else
{
printf("Created with BERencoded Rectangle.\n");
}
xer_fprint(stdout, &asn_DEF_Rectangle, rectangle);
return 0;
}
liuguili@ubuntu:~/asn1ctemp/test$ gcc -I.-o rencode *.c
执行文件:
liuguili@ubuntu:~/asn1ctemp/test$ ./encode
Created with BER encoded Rectangle.
42
23
出现一个非常搞笑的事情,本来代码要生成一个Test文件,我编译完成未执行就去找Test,结果没找到,我还纳闷了半天。
解码清单:
#include
#include
#include
int main(int ac, char **av)
{
Char buf[1024];/*Temporarybuffer */
Rectangle_t*rectangle=0;/*Typetodecode*/
asn_dec_rval_t rval;/*Decoderreturnvalue*/
FILE*fp;/*Inputfilehandler*/
size_t size;/*Numberofbytesread*/
char*filename;/*Inputfilename*/
/*Requireasinglefilenameargument*/
if(ac!=2)
{
fprintf(stderr,”Usage:%s\n”,av[0]);
exit(64);/*better,EX_USAGE*/
}
else
{
filename=av[1];
}
/*Openinputfileasread-onlybinary*/
fp=fopen(filename,”rb”);
if(!fp)
{
perror(filename);
exit(66);/*better,EX_NOINPUT*/
} /*Readuptothebuffersize*/
size=fread(buf,1,sizeof(buf),fp);
fclose(fp);
if(!size)
{
fprintf(stderr,”%s:Emptyorbroken\n”,filename);
exit(65);/*better,EX_DATAERR*/
}
/*DecodetheinputbufferasRectangletype*/
rval=ber_decode(0,&asn_DEF_Rectangle,(void**)&rectangle,buf,size);
if(rval.code!=RC_OK)
{
fprintf(stderr,”%s:BrokenRectangleencodingatbyte%ld\n”,filename,(long)rval.consumed);
exit(65);/*better,EX_DATAERR*/
}
/*PrintthedecodedRectangletypeasXML*/
xer_fprint(stdout,&asn_DEF_Rectangle,rectangle);
return 0;/*Decodingfinishedsuccessfully*/
}
编译出现问题:
liuguili@ubuntu:~/asn1ctemp/test$ gcc -I.-o dencode *.c
main.c: In function ‘main’:
main.c:37:77: error: stray ‘\342’ inprogram
main.c:37:77: error: stray ‘\200’ inprogram
出现此问题的原因是,源代码中存在汉语字符,如“”等,将其改过来即可~
代码参考asn1c用户手册:
asn1c linux使用方法,asn1c工具使用相关推荐
- 解决Linux安装 VMware tools 工具的方法
解决Linux安装 VMware tools 工具的方法 参考文章: (1)解决Linux安装 VMware tools 工具的方法 (2)https://www.cnblogs.com/ios9/p ...
- linux中使用文本工具截取ip 的几种方法
linux中使用文本工具截取ip 的几种方法 1,使用awk工具 [root@mycentos data]# ifconfig ens33 ens33: flags=4163<UP,BROADC ...
- Linux安装 VMware tools 工具的方法(转,已测试成功)
Linux安装 VMware tools 工具的方法 VMware虚拟机中如何安装VMWare-Tools详解好处:可以支持图形界面,可以支持共享文件功能等 1 工具/原料 1)安装过虚拟机软件的计算 ...
- linux下的定时工具有哪些,Linux中使用crond工具创建定时任务的方法
前言 crond是一个linux下的定时执行工具(相当于windows下的scheduled task),可以在无需人工干预的情况下定时地运行任务.crond工具提供crontab命令来设置定时任务, ...
- Linux性能分析命令工具汇总
转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...
- Linux 性能測试工具
Linux 性能測试工具 linux performance 查看系统配置 查看CPU信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64- ...
- linux udevd服务 设备管理工具 简介
目录 udev是什么 udev优势 udev 工作流程图 相关术语 udev 的配置和使用 制定 udev 规则和查询设备信息的实例 eth0变为eth1的解决办法 udev是什么 udev 是 Li ...
- [转]12款最佳Linux命令行终端工具
摘要 "工欲善其事必先利其器",作为菜鸟,也是从别人那里偷学来的一些东东.今天看到同事用到一个终端命令行工具,觉得自己弱爆了.然后在网上搜了下该工具.发现类似的工具还是挺多的,只是 ...
- linux shell find depth,搞定 Linux Shell 文本处理工具,看完这篇集锦就够了
原标题:搞定 Linux Shell 文本处理工具,看完这篇集锦就够了 Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,通常被Python等脚本代替.既然是基本功,那就需要掌握,毕 ...
最新文章
- keras 的 example 文件 mnist_sklearn_wrapper.py 解析
- 获取Gitlab项目的Token
- SQL Server 存储过程的分页
- mysql主要有什么问题_mysql问题
- viwer连接不到服务器 vnc_vnc viewer连不上怎么办 vnc viewer连不上的解决方法
- 浅谈Dynamic 关键字系列之三(下):ExpandoObject,DynamicObject,DynamicMetaObject
- bochs2.3.7 调试版本在ubuntu9.10上的编译安装
- python json dump_为什么json.dump()没有以\ n结尾? - python
- 实现一个定时任务管理器
- RestSharp.RestClient
- 交通灯管理系统视频学习
- Python 重载向量加法运算符 +
- 渗透测试成功的8个关键
- IDEA 在DEBUG模式下如何不执行后续代码直接停止程序?
- 元宇宙的东风吹向何处?企业如何乘势布局?
- 绝地求生显示lsukn服务器,电脑中玩绝地求生出现Failed to initialize BattlEye Service:Generic Error怎么办...
- 轻量级单元测试Cmockery源码学习 第一章
- 如何让子元素居于父元素底部
- 微信小程序—相关配置
- 查询除某一列外的所有列的数据
热门文章
- 红帽 Red Hat Linux相关产品iso镜像下载【百度云】【更新7.7】
- Python批量处理文件的方法总结(包括folder、txt、xml、excel)
- 成功的产品设计师,必须知道的8件事
- 【C语言避坑指南】学习记录
- 商家后台1.0的设计思路
- 武汉计算机学校排名及分数线,湖北省专科学校排名及分数线2019
- tcp/ip网络里的客户端和服务器端 信息交流 与 安全
- 第七篇 亚龙236 led 16*32点阵显示显示汉字
- 迅雷 v7.2.13.3884 新春特别版
- 5w+员工、1.2w+门店,法大大电子合同助力安踏HR数字化