我正在尝试编译一个简单的ASN到C++格式:
RectangleTest DEFINITIONS ::=
BEGIN
Rectangle ::= SEQUENCE {
height INTEGER,
width INTEGER
}
END
但是,当我编译时,我得到以下输出:
/* Rectangle */
typedef struct Rectangle {
long height;
long width;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} Rectangle_t;
我指定了INTEGER数据类型,但得到的是“long”。我想用C++“int”代替。
我正在使用这个开源编译器:
https://github.com/vlm/asn1c
我已经尝试了-fwide-types
选项,但它并没有解决我的问题。
2条答案
按热度按时间zfycwa2u1#
ASN.1与语言无关:INTEGER不是C++ int
你使用的工具是做类型Map的,它给你(或不给你)改变它的选项。
INTEGER的asn1c C++Map很长
我不认为你能改变它
n9vozmp42#
您可以尝试限制整数的允许范围,看看这是否会导致编译器创建其他类型:
默认ASN.1 INTEGER定义不受限制,因此编译器将其转换为语言的最大合理int类型(long)是合乎逻辑的。