我正在编写一段代码,用于将ASN.1 BER二进制文件转换为CSV文本。我有所有ASN类型的(相当大的)结构,它们将被写入输出文本文件中。 现在我可以使用常规方法逐个编写元素(因为输出文件必须是纯文本),但我正在寻找一些聪明的方法来处理它。我希望我能得到一些提示/技巧和建议。
样本结构(实际结构多更大):
typedef struct
{
unsigned short intrecordType;
unsigned long long int callingNumber;
unsigned long long int calledNumber;
char recordingEntity[7];
char mscIncomingTKGP[4];
char mscOutgoingTKGP[4];
char seizureTime[9];
char answerTime[9];
char releaseTime[9]
struct
{
int gsm0408Cause;
int gsm0902MapErrorValue;
int ccittQ767Cause;
int networkSpecificCause;
int manufacturerSpecificCause;
} diagnostics;
unsigned long long int callReference;
int sequenceNumber;
int lastLongPartInd;
int recordExtensions;
char exchangeIdentity[MAX_IA5STRING_SIZE];
} IncGatewayRec;
有33个这样的结构(每个约60-70个元素)及其对应的存储标志结构,注意哪些字段是填充的,哪些不是(相同的结构,只有所有数据类型为{{ 1}}来存储标志)
提前致谢。 :)
答案 0 :(得分:1)
编写一个解析结构声明的程序,并生成一个打印函数。
答案 1 :(得分:0)
一些商业ASN.1工具(例如来自OSS Nokalva的工具)能够让你用你自己的fprintf()函数替换它,如果它的常规函数打印解码的消息对你来说是不够的。考虑下载OSS ASN.1工具的免费试用版,看看它是否适合您。