将大型结构转储到文本文件的一些智能方法

时间:2012-06-06 10:08:40

标签: c file struct structure asn.1

我正在编写一段代码,用于将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}}来存储标志)

提前致谢。 :)

2 个答案:

答案 0 :(得分:1)

编写一个解析结构声明的程序,并生成一个打印函数。

答案 1 :(得分:0)

一些商业ASN.1工具(例如来自OSS Nokalva的工具)能够让你用你自己的fprintf()函数替换它,如果它的常规函数​​打印解码的消息对你来说是不够的。考虑下载OSS ASN.1工具的免费试用版,看看它是否适合您。