java JavaStruct 之 解析接收硬件十六进制byte[] 变成实体类 反之把实体类转成byte[] 发送给硬件

java JavaStruct 之 解析接收硬件十六进制byte[] 变成实体类 反之把实体类转成byte[] 发送给硬件

我们的接收硬件的数据一般都是十六进制的byte[] 但是没一段代表一个指令 所以要从里面区分出来处理每一个数据如同json解析一样 .

首先,按照自己的硬件协议排序好实体类:

@StructClass
public class CallbackInstruBase {
    @StructField(order = 0)
    public  short instruhead;//指令头
    @StructField(order = 1)
    public byte packemunber;//包序号
    @StructField(order = 2)
    public  byte version;//版本号
    @StructField(order = 3)
    public  short instrulength;//指令长度
    @StructField(order = 4)
    public  short datainstru;//数据指令
}
一段协议

java JavaStruct 之 解析接收硬件十六进制byte[] 变成实体类 反之把实体类转成byte[] 发送给硬件

经过:

JavaStruct.unpack(callbase, newbyte,ByteOrder.BIG_ENDIAN);// 
就可以拿到实体类数据 当然数据还需按自己要求转换

发送指令则相反:

  //发送指令列子
public static void SendJieXi() {
    byte[] mbyte = new byte[0];
    SendInstruBase msendinstrubse = new SendInstruBase();
    msendinstrubse.instruhead= (short) 0xDDAA;
    msendinstrubse.packemunber=1;
    msendinstrubse.version=1;
    msendinstrubse.instrulength=(short)0x000B;
    msendinstrubse.datainstru=0x0000;
    try {
        mbyte = JavaStruct.pack(msendinstrubse, ByteOrder.BIG_ENDIAN);
    } catch (StructException e) {
        e.printStackTrace();
    }
    byte [] mbyte2=new byte[0];
    SendInstruBase.LoginWiFi mLoginWiFi =new SendInstruBase.LoginWiFi();
    mLoginWiFi.activationtype=1;
    mLoginWiFi.devicestype=1;
    mLoginWiFi.MAC= DataConversion.AddByteCollage(12,"钟村");
    mLoginWiFi.CSQ=1;
    try {
        mbyte2= JavaStruct.pack(mLoginWiFi,ByteOrder.BIG_ENDIAN);
    } catch (StructException e) {
        e.printStackTrace();
    }
    Log.i("songkunjian","AddByteCollage====:"+new String(DataConversion.AddByteCollage(12,"钟村")));
    //   ProtocolBase.cs(DataConversion.addBytes(mbyte,mbyte2));
}