0

嗨,我对 kaitai struct 很新,如何在 eclipse 中运行在 kaitai struct webide 上解析为 java(目标语言)的代码,我已经浏览了 kaitai struct 文档,但我仍然有一些疑问,有人可以帮我吗? 我也发布了解析的java类和主类

package com.ccx.ccxgw.message.parsers;

import io.kaitai.struct.ByteBufferKaitaiStream;
import io.kaitai.struct.KaitaiStruct;
import io.kaitai.struct.KaitaiStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.nio.charset.Charset;

public class LocationRecord extends KaitaiStruct {
public Map<String, Integer> _attrStart = new HashMap<String, Integer>();
public Map<String, Integer> _attrEnd = new HashMap<String, Integer>();
public Map<String, ArrayList<Integer>> _arrStart = new HashMap<String, 
ArrayList<Integer>>();
public Map<String, ArrayList<Integer>> _arrEnd = new HashMap<String, 
ArrayList<Integer>>();

public static LocationRecord fromFile(String fileName) throws IOException {
    return new LocationRecord(new ByteBufferKaitaiStream(fileName));
}
public static String[] _seqFields = new String[] { "imei", "reserved1", 
"reserved2", "latrawintpart", "latrawfloatpart", "lonrawintpart", 
"lonrawfloatpart", "reserved3", "lbsinfo", "ta", "p", "mt", "fff", "ddd" };

public LocationRecord(KaitaiStream _io) {
    this(_io, null, null);
}

public LocationRecord(KaitaiStream _io, KaitaiStruct _parent) {
    this(_io, _parent, null);
}

public LocationRecord(KaitaiStream _io, KaitaiStruct _parent, LocationRecord 
_root) {
    super(_io);
    this._parent = _parent;
    this._root = _root == null ? this : _root;
}
public void _read() {
    _attrStart.put("imei", this._io.pos());
    this.imei = this._io.readBytes(15);
    _attrEnd.put("imei", this._io.pos());
    _attrStart.put("reserved1", this._io.pos());
    this.reserved1 = this._io.readBytes(6);
    _attrEnd.put("reserved1", this._io.pos());
    _attrStart.put("reserved2", this._io.pos());
    this.reserved2 = this._io.readBytes(6);
    _attrEnd.put("reserved2", this._io.pos());
    _attrStart.put("latrawintpart", this._io.pos());
    this.latrawintpart = this._io.readU2be();
    _attrEnd.put("latrawintpart", this._io.pos());
    _attrStart.put("latrawfloatpart", this._io.pos());
    this.latrawfloatpart = this._io.readU2be();
    _attrEnd.put("latrawfloatpart", this._io.pos());
    _attrStart.put("lonrawintpart", this._io.pos());
    this.lonrawintpart = this._io.readU2be();
    _attrEnd.put("lonrawintpart", this._io.pos());
    _attrStart.put("lonrawfloatpart", this._io.pos());
    this.lonrawfloatpart = this._io.readU2be();
    _attrEnd.put("lonrawfloatpart", this._io.pos());
    _attrStart.put("reserved3", this._io.pos());
    this.reserved3 = this._io.readBytes(3);
    _attrEnd.put("reserved3", this._io.pos());
    _attrStart.put("lbsinfo", this._io.pos());
    this.lbsinfo = new String(this._io.readBytes(3), 
   Charset.forName("ASCII"));
    _attrEnd.put("lbsinfo", this._io.pos());
    _attrStart.put("ta", this._io.pos());
    this.ta = new String(this._io.readBytes(8), Charset.forName("ASCII"));
    _attrEnd.put("ta", this._io.pos());
    _attrStart.put("p", this._io.pos());
    this.p = new String(this._io.readBytes(8), Charset.forName("ASCII"));
    _attrEnd.put("p", this._io.pos());
    _attrStart.put("mt", this._io.pos());
    this.mt = new String(this._io.readBytes(8), Charset.forName("ASCII"));
    _attrEnd.put("mt", this._io.pos());
    _attrStart.put("fff", this._io.pos());
    this.fff = new String(this._io.readBytes(8), Charset.forName("ASCII"));
    _attrEnd.put("fff", this._io.pos());
    _attrStart.put("ddd", this._io.pos());
    this.ddd = new String(this._io.readBytes(8), Charset.forName("ASCII"));
    _attrEnd.put("ddd", this._io.pos());
}
private Double latitude;
public Double latitude() {
    if (this.latitude != null)
        return this.latitude;
    double _tmp = (double) ((latitudeintpart() + latitudefloatpart()));
    this.latitude = _tmp;
    return this.latitude;
}
private Double longitude;
public Double longitude() {
    if (this.longitude != null)
        return this.longitude;
    double _tmp = (double) ((longitudeintpart() + longitudefloatpart()));
    this.longitude = _tmp;
    return this.longitude;
}
private Double latitudefloatpart;
public Double latitudefloatpart() {
    if (this.latitudefloatpart != null)
        return this.latitudefloatpart;
    double _tmp = (double) ((((((latrawintpart() * 10000) + 
latrawfloatpart()) - (latitudeintpart() * 1000000)) * 0.0001) / 60));
    this.latitudefloatpart = _tmp;
    return this.latitudefloatpart;
}
private Double longitudefloatpart;
public Double longitudefloatpart() {
    if (this.longitudefloatpart != null)
        return this.longitudefloatpart;
    double _tmp = (double) ((((((lonrawintpart() * 10000) + 
lonrawfloatpart()) - (longitudeintpart() * 1000000)) * 0.0001) / 60));
    this.longitudefloatpart = _tmp;
    return this.longitudefloatpart;
}
private Integer longitudeintpart;
public Integer longitudeintpart() {
    if (this.longitudeintpart != null)
        return this.longitudeintpart;
    int _tmp = (int) ((((lonrawintpart() * 10000) + lonrawfloatpart()) / 
1000000));
    this.longitudeintpart = _tmp;
    return this.longitudeintpart;
}
private Integer latitudeintpart;
public Integer latitudeintpart() {
    if (this.latitudeintpart != null)
        return this.latitudeintpart;
    int _tmp = (int) ((((latrawintpart() * 10000) + latrawfloatpart()) / 
 1000000));
    this.latitudeintpart = _tmp;
    return this.latitudeintpart;
}
private byte[] imei;
private byte[] reserved1;
private byte[] reserved2;
private int latrawintpart;
private int latrawfloatpart;
private int lonrawintpart;
private int lonrawfloatpart;
private byte[] reserved3;
private String lbsinfo;
private String ta;
private String p;
private String mt;
private String fff;
private String ddd;
private LocationRecord _root;
private KaitaiStruct _parent;
public byte[] imei() { return imei; }
public byte[] reserved1() { return reserved1; }
public byte[] reserved2() { return reserved2; }
public int latrawintpart() { return latrawintpart; }
public int latrawfloatpart() { return latrawfloatpart; }
public int lonrawintpart() { return lonrawintpart; }
public int lonrawfloatpart() { return lonrawfloatpart; }
public byte[] reserved3() { return reserved3; }
public String lbsinfo() { return lbsinfo; }
public String ta() { return ta; }
public String p() { return p; }
public String mt() { return mt; }
public String fff() { return fff; }
public String ddd() { return ddd; }
public LocationRecord _root() { return _root; }
public KaitaiStruct _parent() { return _parent; }
}

主要课程如下

package com.ccx.ccxgw.message.parsers;

public class test {

public static void main(String[] args) {
 try {

  LocationRecord lr = 
  LocationRecord.fromFile("D:\\Projects\\CcxParser\\CcxParsers\\loc.data");
  lr.imei();
  lr.reserved1();
  lr.reserved2();
  lr.latrawintpart();
  lr.latrawfloatpart();
  lr.lonrawintpart();
  lr.lonrawfloatpart();
  lr.reserved3();
  lr.lbsinfo();
  lr.ta();
  lr.p();
  lr.mt();
  lr.fff();
  lr.ddd();

  } catch (Exception e) {
  e.printStackTrace(System.out);
  }
  }

  }

请建议我应该进行哪些修改,如果可能的话,请为我
提供主类的代码片段以调用 kaitai struct 类方法。我想解析这条消息 {354105059135656,010104,164536,12.888888,77.5564499,100,lbs,ta,p,mt,fff,ddd}

4

0 回答 0