java解析串口数据解析,异或不太懂,求大佬帮忙给点思路实现解析

所传送的数据为:每帧数据由 12 组数据组成。格式如下
异或=2⊕3⊕……8⊕9

第 X 字节 内 容 及 注 解
1 02(XON) 开始
2 +或- 符号位
3 数据 高位
数据
数据
8 数据 低位
9 小数点位数 从右到左(0~4)
10 异或校验 高四位
11 异或校验 低四位
12 03(X0FF) 结束
阅读 3k
2 个回答

解析步骤

  1. 从串口读取 12 字节,存成数组变量 bs
  2. 若首字节不是 2,报错
  3. 若尾字节不是 3,报错
  4. bs[8] 不在 04 范围,报错
  5. 计算数据段的异或值 xValue(伪代码)

    xValue = bs[1] ^ bs[2] ^ bs[3] ^ bs[4] ^ bs[5] ^ bs[6] ^ bs[7] ^ bs[8] 
  6. bs[9] 不是 xValue >> 4,报错
  7. bs[10] 不是 xValue & 0xf,报错
  8. 计算数据值 realValue(伪代码)

    // 提取 big-endian 整数。
    n = 0;
    for (i=3; i<=8; i++) {
        n = (n << 8) | bs[i-1];
    }
    
    // 符号,假定零为正,非零为负。
    // 此处需要确认!!!
    if (bs[1] != 0) {
        n *= -1;
    }
    
    // 转成小数。
    // 有多种转法,结果精度可能不同,请根据实际情况做选择。比如用字符串。
    realValue = n * 1.0;
    for (i=0; i<bs[8]; i++) {
        realValue /= 10;
    }

应该说的是异或(第10和第11个字节)等于第2到第9个字节的异或。但是怎么拆成两个字节了,这个没有其他说明吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题