2015-03-13 1 views
3

Soit j'ai un asn:asn1c continue d'utiliser longtemps au lieu de INTEGER_t mais je ne demande pas pour que

A ::= SEQUENCE { 
    a INTEGER (0 .. 255),  
    b INTEGER (0 .. 255),  
    c INTEGER (0 .. 65535),  
    d INTEGER (0 .. 65535), 
    e [0] INTEGER (0 ..255) OPTIONAL, 
    f[1] INTEGER (0 .. 63) OPTIONAL 
} 

Je compile sans fnative-types, mais le code ressemble

typedef struct A{ 
long  a; 
long  b; 
long  c; 
long  d; 
long *e/* OPTIONAL */; 
long *f/* OPTIONAL */; 

/* Context for parsing across buffer boundaries */ 
asn_struct_ctx_t _asn_ctx; 
} A_t; 

Pourquoi ça? Il provoque une séquence d'octets DER longue.

+2

ne peut pas répondre car je ne suis pas familier avec le compilateur asn1c. Cependant, le codage DER est garanti unique. Donc, quelle que soit la structure de l'équivalent C, les champs INTEGER seront toujours codés avec le plus petit nombre d'octets requis. – jsantander

Répondre

0

Selon le compilateur ASN.1 que vous utilisez, vous pouvez spécifier les types de variables C utilisés pour les champs de structure.

Dans le jeu d'outils Objective Systems, vous pouvez avoir un fichier de configuration XML qui est entré dans le compilateur avec votre schéma ASN.1. Cela vous permet de dire au compilateur ASN.1 quel type d'entier doit être utilisé pour a, b, c, etc.