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

本文介绍了一种使用Java处理十六进制byte[]数组的方法,通过定义实体类并利用JavaStruct工具进行指令的解析与打包。具体展示了如何将接收到的硬件数据解析成有意义的指令,以及如何构造指令进行发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们的接收硬件的数据一般都是十六进制的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));
}

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值