Android与单片机---开发板---智能硬件---智能设备---数据协议--开发总结

本文介绍了Android与单片机通信过程中涉及的数据协议,包括byte与bit的相互转化,以及如何封装协议头。通过具体代码展示了如何处理二进制数据,如int转byte数组,以及如何构建协议头。最后强调了理解协议结构的重要性。

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

  • 既然把byte转为了8个bit位,那我们又怎么再把bit转回为byte呢?

/**

  • 8个bit位转为byte
    */
    public static byte bit2Byte(byte[] bytes) {
    if (bytes.length != 8) return 0;
    String binary = “”;
    byte result;
    for (byte b : bytes) {
    binary += b;
    }
    if (bytes[0] == 0) {
    // 正数
    result = (byte) Integer.parseInt(binary, 2);
    } else {
    // 负数
    result = (byte) (Integer.parseInt(binary, 2) - 256);
    }
    return result;
    }
3.2 上面已经说了byte与bit的相互转化,现在就轮到int
  • 上面已经说了一个int4个字节32bit
  • Integer类已经为我们封装好了转bit的方法,如下:

String s = Integer.toBinaryString(35235);
//输出结果
1000100110100011

  • 可以看到没有32位,这是为什么呢?这是因为高位都是为0所以就直接省略了,当然我们也可以主动补齐32位只需要在高位补0即可。
  • bit再转回为int

int result = Integer.parseInt(“1000100110100011”, 2);
//输出结果
35235

  • 这里需要注意的是Integer.toBinaryString()可以将负数转化为二进制,但是Integer.parseInt("", 2)不能直接将负数的二进制转为int,如下:

String radix = Integer.toBinaryString(-35235);
System.out.println(radix);
int result = Integer.parseInt(radix, 2);
System.out.println(result);

程序执行会报一个java.lang.NumberFormatException: For input string:"11111111111111110111011001011101"异常,那我们怎么将负数的转回为int呢?当然是有方法的啦,如下:

//需要借助 BigInteger类
Str

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值