HarmonyOS 鸿蒙Next 蓝牙数据发送解析 CRC

发布于 1周前 作者 h691938207 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 蓝牙数据发送解析 CRC

这个是安卓的发送指令方法:
private fun setDeviceOpen(open: Boolean): ByteArray {
val dataOpenModel = ByteArray(8)
dataOpenModel[0] =0xAA.toByte()
dataOpenModel[1] = (0 shl 6 or (0x0108 shr 8)).toByte()
dataOpenModel[2] = 0x0108.toByte()
dataOpenModel[3] = 0x00
dataOpenModel[4] = 0x00
dataOpenModel[5] = 0x01
dataOpenModel[6] = if (open) 0x01.toByte() else 0x00.toByte()
dataOpenModel[7] = verifyCrc(dataOpenModel, dataOpenModel.size).code.toByte() //crc 校验
return dataOpenModel
} 

指令发送结果: 0xAA,0x01,0x08,0x07,0x00,0x01,0x01,0xA4

最后一位 “ 0XA4” 就是 CRC 校验的结果 ,我的 CRC 校验的代码是:
/**
* CRC 16 校验
*
* @param buf
* @param len
* @return
*/
private fun verifyCrc(buf: ByteArray, len: Int): Char {
var sum = 0.toChar()
var i: Int
i = 0
while (i < len) {
sum = (sum.code xor buf[i].toInt()).toChar()
i++
}
return sum
}

请问:这个怎么用鸿蒙写,我自己转出来的不对。


更多关于HarmonyOS 鸿蒙Next 蓝牙数据发送解析 CRC的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

CRC的实现步骤(以crc16为例,宽度为16位):

(1)确定模型标准

(2)将待发送数据与预定初始值进行异或得到新的数据M

(2)在M后面(右侧)加上16个0得到数据N

(3)将N与模型标准除数进行异或,得到余数

(4)将余数与结果异或值进行异或,得到目标值

CRC-32校验文档示例:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-zlib-V5#crc3212

更多关于HarmonyOS 鸿蒙Next 蓝牙数据发送解析 CRC的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,蓝牙数据发送与解析的CRC(循环冗余校验)处理通常涉及以下几个关键点:

  1. CRC算法选择:HarmonyOS支持多种CRC算法,如CRC-8、CRC-16、CRC-32等。在蓝牙数据传输中,常用的CRC算法为CRC-16或CRC-24,具体选择需根据协议要求。

  2. 数据封装:在发送数据前,需将原始数据按协议封装,包括帧头、数据长度、数据域和CRC校验域。CRC校验域是通过对帧头、数据长度和数据域进行CRC计算得到的。

  3. CRC计算:使用选定的CRC算法对封装好的数据进行计算,得到CRC校验值。该值将附加在数据包的末尾,作为接收方验证数据完整性的依据。

  4. 数据解析:接收方在收到数据包后,先提取CRC校验域,再对帧头、数据长度和数据域进行相同的CRC计算,将结果与提取的CRC校验值进行比对。若一致,则数据无误;若不一致,则数据可能已损坏或传输出错。

  5. 错误处理:若发现数据错误,接收方可采取重传请求、错误标记或忽略该数据包等措施。

以上信息为HarmonyOS鸿蒙Next系统中蓝牙数据发送与解析CRC的基本流程。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部