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;//数据指令
}
一段协议
经过:
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)); }