1 使用asn1c实现编码
参考网址:http://lengxuezhixuan.blog.chinaunix.net/uid-28765492-id-3765759.html
PS:这个网址就是根据下载的asn1c中的英文指导文档做的。
* 遇到的问题:
(1)头文件的引用:头文件放在了vc/include下,对.h文件可以使用include<>。对于本工程下的.h文件使用include""
(2)如果cpp与c文件共存,会有预编译头不兼容的问题,可以设置所有源文件的属性去掉预编译头,或者将所有代码调整成cpp或c
****************************************************************************************************
本人所做的实验是用c编码、用java解码:将编码结果直接用%s输出到txt文件,之后用java解码就实现了不同语言间序列化数据的使用(其实都用不到asn文件,用c编码时只是需要利用asn文件生成那一系列c文件;解码就更不需要asn了)
PS:之后编了一个复杂的,各种报错类型找不到,浪费了一个小时才发现asn-0.9.21的类型定义名称和网上的不一样(要去sketon里面找),好坑。编码时自己设计的结构名name会被typedef成name_t!
=============================================================
2 使用javaAsn1Comilper解码(参考javaAsn1Comilper指导文档的示例)
(1)TestUtil是一个示例,可以不要(里面有结构化输出,可以直接copy一下);TestParser也可以不要,需要同时删掉另外一个继承了它的类
(2)为自己设计的结构里的元素分别创建类,并分别继承相应的类型:为rectangle的内容创建一个类width(继承ASN1Integer)
package com.chaosinmotion.asn1;
public class width extends ASN1Integer {
public width(){//默认是5
super(5);
}
public width(long value){//设置大小
super(value);
}
}
(3)创建自己设计的那个结构的类:创建类Rectangle。必须用super.addElement为结构添加元素,否则该结构里啥也没有
package com.chaosinmotion.asn1;
public class BerRectangle extends Sequence {