我正在尝试使用从github(v 1.1)编译的preon来解析我从嵌入式C ++应用程序获得的消息。我在我的项目中包含了antlr 3.3完整版。我将以下类定义为网络消息的标头:
public class Header {
@BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
public MessageType MsgType;
@BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
public int MsgNo;
@BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
public int RspNo;
@BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
public int Length;
}
MessageType枚举如下:
public enum MessageType{
@BoundEnumOption(0x0000) Dummy1,
@BoundEnumOption(0x0001) Dummy2
}
我尝试将收到的网络缓冲区强制转换为:
Codec<Header> headerCodec = Codecs.create(Header.class);
Header h = Codecs.decode(headerCodec, headerData);
System.out.println(h);
我收到以下antlr错误。我的定义或包含的包裹有问题吗?
第1行:0在输入'&lt;&lt; EOF&gt;'
由于
答案 0 :(得分:0)
我发现了问题。对于枚举,您必须在BoundNumber注释中明确提供大小值,如下所示:
@BoundNumber(ByteOrder.BigEndian, size="32")
public MessageType MsgType;