c++ 使用asn1c编译器,对于INTEGER数据类型,我得到“long”而不是“int

vbkedwbf  于 2023-05-02  发布在  其他
关注(0)|答案(2)|浏览(271)

我正在尝试编译一个简单的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选项,但它并没有解决我的问题。

zfycwa2u

zfycwa2u1#

ASN.1与语言无关:INTEGER不是C++ int
你使用的工具是做类型Map的,它给你(或不给你)改变它的选项。
INTEGER的asn1c C++Map很长
我不认为你能改变它

n9vozmp4

n9vozmp42#

您可以尝试限制整数的允许范围,看看这是否会导致编译器创建其他类型:

RectangleTest DEFINITIONS ::=
BEGIN
 
Rectangle ::= SEQUENCE {
    height  INTEGER (0..2147483647),
    width   INTEGER (0..2147483647)        
}
 
END

默认ASN.1 INTEGER定义不受限制,因此编译器将其转换为语言的最大合理int类型(long)是合乎逻辑的。

相关问题