解压: 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工具使用相关推荐

  1. 解决Linux安装 VMware tools 工具的方法

    解决Linux安装 VMware tools 工具的方法 参考文章: (1)解决Linux安装 VMware tools 工具的方法 (2)https://www.cnblogs.com/ios9/p ...

  2. ​linux中使用文本工具截取ip 的几种方法

    linux中使用文本工具截取ip 的几种方法 1,使用awk工具 [root@mycentos data]# ifconfig ens33 ens33: flags=4163<UP,BROADC ...

  3. Linux安装 VMware tools 工具的方法(转,已测试成功)

    Linux安装 VMware tools 工具的方法 VMware虚拟机中如何安装VMWare-Tools详解好处:可以支持图形界面,可以支持共享文件功能等 1 工具/原料 1)安装过虚拟机软件的计算 ...

  4. linux下的定时工具有哪些,Linux中使用crond工具创建定时任务的方法

    前言 crond是一个linux下的定时执行工具(相当于windows下的scheduled task),可以在无需人工干预的情况下定时地运行任务.crond工具提供crontab命令来设置定时任务, ...

  5. Linux性能分析命令工具汇总

    转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...

  6. Linux 性能測试工具

    Linux 性能測试工具 linux performance 查看系统配置 查看CPU信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64- ...

  7. linux udevd服务 设备管理工具 简介

    目录 udev是什么 udev优势 udev 工作流程图 相关术语 udev 的配置和使用 制定 udev 规则和查询设备信息的实例 eth0变为eth1的解决办法 udev是什么 udev 是 Li ...

  8. [转]12款最佳Linux命令行终端工具

    摘要 "工欲善其事必先利其器",作为菜鸟,也是从别人那里偷学来的一些东东.今天看到同事用到一个终端命令行工具,觉得自己弱爆了.然后在网上搜了下该工具.发现类似的工具还是挺多的,只是 ...

  9. linux shell find depth,搞定 Linux Shell 文本处理工具,看完这篇集锦就够了

    原标题:搞定 Linux Shell 文本处理工具,看完这篇集锦就够了 Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,通常被Python等脚本代替.既然是基本功,那就需要掌握,毕 ...

最新文章

  1. keras 的 example 文件 mnist_sklearn_wrapper.py 解析
  2. 获取Gitlab项目的Token
  3. SQL Server 存储过程的分页
  4. mysql主要有什么问题_mysql问题
  5. viwer连接不到服务器 vnc_vnc viewer连不上怎么办 vnc viewer连不上的解决方法
  6. 浅谈Dynamic 关键字系列之三(下):ExpandoObject,DynamicObject,DynamicMetaObject
  7. bochs2.3.7 调试版本在ubuntu9.10上的编译安装
  8. python json dump_为什么json.dump()没有以\ n结尾? - python
  9. 实现一个定时任务管理器
  10. RestSharp.RestClient
  11. 交通灯管理系统视频学习
  12. Python 重载向量加法运算符 +
  13. 渗透测试成功的8个关键
  14. IDEA 在DEBUG模式下如何不执行后续代码直接停止程序?
  15. 元宇宙的东风吹向何处?企业如何乘势布局?
  16. 绝地求生显示lsukn服务器,电脑中玩绝地求生出现Failed to initialize BattlEye Service:Generic Error怎么办...
  17. 轻量级单元测试Cmockery源码学习 第一章
  18. 如何让子元素居于父元素底部
  19. 微信小程序—相关配置
  20. 查询除某一列外的所有列的数据

热门文章

  1. 红帽 Red Hat Linux相关产品iso镜像下载【百度云】【更新7.7】
  2. Python批量处理文件的方法总结(包括folder、txt、xml、excel)
  3. 成功的产品设计师,必须知道的8件事
  4. 【C语言避坑指南】学习记录
  5. 商家后台1.0的设计思路
  6. 武汉计算机学校排名及分数线,湖北省专科学校排名及分数线2019
  7. tcp/ip网络里的客户端和服务器端 信息交流 与 安全
  8. 第七篇 亚龙236 led 16*32点阵显示显示汉字
  9. 迅雷 v7.2.13.3884 新春特别版
  10. 5w+员工、1.2w+门店,法大大电子合同助力安踏HR数字化