---
title: 数据结构
description: "ASN.1数据描述符。```"
url: https://www.hikunpeng.com/document/detail/zh/kunpengaccel/system-lib/kslans1/kunpengaccel_ksl_16_0160.html
sourcePath: /source/zh/kunpengaccel/system-lib/kslans1/kunpengaccel_ksl_16_0160.html
indexId: 16ea53a42d5add705fe78719f2b73a6079914aac2866523dc42f582f646fbb2a72
---
# 数据结构

#### AsnDesc

ASN.1数据描述符。```
struct AsnDescriptor {
    uint16_t id;             /* 描述符的唯一索引 */
    uint16_t attrs;          /* 类型属性（bitmap形式），见#AsnDescAttr */
    uint32_t limit;          /* 成员数组或字符数组的大小限制 */
    uint32_t nmem;           /* 成员总个数 */
    AsnDescInfo i;           /* 类型描述信息 */
    uint8_t extNum;          /* 扩展成员个数 */
    uint8_t reserved;        /* 保留字段 */
    size_t size;             /* 该类型成员大小 */
    AsnDescMember m;         /* 成员列表 */
    AsnConstraint cstr;      /* 约束 */
    AsnLocalTag localTag;    /* 局部标签信息 */
    AsnBuiltinType asn1Type; /* ASN1内置支持类型 */

    /* ASN1协议文本中的类型名（匿名类型使用成员名称）。注意：该名字非唯一 */
    AsnNameValue name;
    AsnDescNameValue nameValues;

    ASN_ENC_FUNC enc; /* 编码函数 */
    ASN_DEC_FUNC dec; /* 解码函数 */

    uintptr_t reservedArr[4];
};

typedef struct AsnDescriptor AsnDesc;
```


#### AsnBuf

编解码缓冲区结构体。

```
typedef struct {
    uint8_t *buf;    /* 缓冲区的起始地址 */
    uint32_t bufLen; /* 缓冲区的长度（单位：Byte） */
    union {
        uint32_t bitIdx;  /* 缓冲区当前的比特下标，在BER/DER/PER中使用 */
        uint32_t byteIdx; /* 缓冲区当前的字节下标，仅在XER中使用 */
    };
} AsnBuf;
```


#### AsnCtx

ASN1上下文结构体。```
typedef struct {
    AsnBuf *buf;             /* 编码缓冲区结构体 */
    uint32_t ret;            /* 错误码 #AsnErrors */
    uint8_t method;          /* ASN1编解码方法 #AsnCodecMethod */
    uint8_t level;           /* 成员层级，可以辅助格式化 */
    bool isDynamicArray;     /* 是否使用动态数组定义数组 */
    bool memPoolInitialized; /* 内存池是否已初始化 */
    AsnLocalTag *localTag;   /* 局部标签信息 */
    uint32_t openTypeKey;    /* OpenType类型Key */
    uint32_t reserved1;
    AsnMemPool *memPool;     /* 内存池 */
    uintptr_t reserved[2];
} AsnCtx;
```
